home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 2: Applications / Linux Cubed Series 2 - Applications.iso / editors / emacs / xemacs / xemacs-1.006 / xemacs-1 / lib / xemacs-19.13 / etc / NEWS < prev    next >
Encoding:
Text File  |  1995-08-30  |  111.9 KB  |  2,714 lines

  1. -*- mode:outline; minor-mode:outl-mouse -*-
  2.  
  3. * Introduction
  4. ==============
  5.  
  6. This file presents some general information about XEmacs.  It is primarily
  7. about the evolution of XEmacs and its release history.
  8.  
  9. There are five sections.
  10.  
  11.     Introduction................(this section) provides an introduction
  12.  
  13.     Using Outline Mode..........briefly explains how to use outline mode
  14.  
  15.     The History of XEmacs.......some historical notes
  16.  
  17.     What's Different?...........new or changed capabilities
  18.  
  19.     XEmacs Release Notes........details of the changes between releases
  20.  
  21. New users should look at the next section on "Using Outline Mode".  You will
  22. be more efficient when you can navigate quickly through this file.  Users
  23. interested in some of the details of how XEmacs differs from FSF GNU Emacs
  24. should read the section "What's Different?".  Users who would to know which
  25. capabilities have been introduced in each release should look at the
  26. appropriate subsection of the "XEmacs Release Notes."
  27.  
  28.     N.B.  The term "FSF GNU Emacs" refers to any release of Emacs Version 19
  29.     from the Free Software Foundation's GNU Project.  The term "XEmacs"
  30.     refers to this program or to its predecessors "Era" and "Lucid Emacs".
  31.     The predecessor of all these program is called "Emacs 18".  When no
  32.     particular version is implied, "Emacs" will be used.
  33.  
  34.  
  35. * Using Outline Mode
  36. ====================
  37.  
  38. This file is in outline mode, a major mode for viewing (or editing)
  39. outlines.  It allows you to make parts of the text temporarily invisible so
  40. that you can see just the overall structure of the outline.
  41.  
  42. There are two ways of using outline mode:  with keys or with menus.  Using
  43. outline mode with menus is the simplest and is just as effective as using
  44. keystrokes.  There are menus for outline mode on the menubar as well as in
  45. popup menus activated by pressing mouse button 3.
  46.  
  47. Experiment with the menu commands.  Menu items under "Headings" allow
  48. you to navigate from heading to heading.  Menu items under "Show" make
  49. visible portions of the outline while menu items under "Hide" do the
  50. opposite.
  51.  
  52. A special minor mode called "outl-mouse" has been automatically enabled.  In
  53. this minor mode, glyphs appear which, when clicked on, will alternately hide
  54. or show sections of the outline.
  55.  
  56. You may at any time press `C-h m' to get a listing of the outline mode key
  57. bindings.  They are reproduced here:
  58.  
  59. Commands:
  60. C-c C-n   outline-next-visible-heading      move by visible headings
  61. C-c C-p   outline-previous-visible-heading
  62. C-c C-f   outline-forward-same-level        similar but skip subheadings
  63. C-c C-b   outline-backward-same-level
  64. C-c C-u   outline-up-heading            move from subheading to heading
  65.  
  66. C-c C-t    make all text invisible (not headings).
  67. M-x show-all    make everything in buffer visible.
  68.  
  69. The remaining commands are used when point is on a heading line.
  70. They apply to some of the body or subheadings of that heading.
  71. C-c C-d   hide-subtree    make body and subheadings invisible.
  72. C-c C-s   show-subtree    make body and subheadings visible.
  73. C-c tab   show-children    make direct subheadings visible.
  74.          No effect on body, or subheadings 2 or more levels down.
  75.          With arg N, affects subheadings N levels down.
  76. C-c C-c       make immediately following body invisible.
  77. C-c C-e       make it visible.
  78. C-c C-l       make body under heading and under its subheadings invisible.
  79.              The subheadings remain visible.
  80. C-c C-k  make all subheadings at all levels visible.x1
  81.  
  82.  
  83. * The History of XEmacs
  84. =======================
  85.  
  86. This product is an extension of GNU Emacs, previously known to some as
  87. "Lucid Emacs" or "ERA".  It was initially based on an early version of Emacs
  88. Version 19 from the Free Software Foundation and has since been kept
  89. up-to-date with recent versions of that product.  It stems from a
  90. collaboration of Lucid, Inc. with SunPro (a division of Sun Microsystems,
  91. Inc.) and the University of Illinois.
  92.  
  93. NOTE: Lucid, Inc. is currently out of business but development on XEmacs
  94. continues strong.  Recently, Amdahl Corporation and INS Engineering have
  95. both contributed significantly to the development of XEmacs.
  96.  
  97. ** Why Another Version of Emacs?  (The Lucid, Inc. Point of View)
  98. =================================================================
  99.  
  100. Lucid's latest product, Energize, is a C/C++ development environment.
  101. Rather than invent (and force our users to learn) a new user-interface, we
  102. chose to build part of our environment on top of the world's best editor,
  103. FSF GNU Emacs.  (Though our product is commercial, the work we did on is
  104. free software, and is useful without having to purchase our product.)
  105.  
  106. We needed a version of Emacs with mouse-sensitive regions, multiple fonts,
  107. the ability to mark sections of a buffer as read-only, the ability to detect
  108. which parts of a buffer has been modified, and many other features.
  109.  
  110. *** Why Not Epoch or FSF GNU Emacs?
  111. -----------------------------------
  112.  
  113. For our purposes, the existing version of Epoch was not sufficient; it did
  114. not allow us to put arbitrary pixmaps/icons in buffers, `undo' did not
  115. restore changes to regions, regions did not overlap and merge their
  116. attributes in the way we needed, and several other things.
  117.  
  118. We could have devoted our time to making Epoch do what we needed (and, in
  119. fact, we spent some time doing that in 1990) but, since the Free Software
  120. Foundation planned to include Epoch-like features in their Version 19, we
  121. decided that our efforts would be better spent improving FSF GNU Emacs
  122. instead of Epoch.
  123.  
  124. Our original hope was that our changes to FSF GNU Emacs would be
  125. incorporated into the "official" v19.  However, scheduling conflicts arose,
  126. and we found that, given the amount of work still remaining to be done, we
  127. didn't have the time or manpower to do the level of coordination that would
  128. be necessary to get our changes accepted by the Free Software Foundation.
  129. Consequently, we released our work as a forked branch of Emacs, instead of
  130. delaying any longer.
  131.  
  132. Roughly a year after Lucid Emacs 19.0 was released, a beta version of the
  133. Free Software Foundation branch of Emacs 19 was released.  This version
  134. was better in some areas, and worse in others, as reflects the differing
  135. focus of our development efforts.
  136.  
  137. We planned to continue developing and supporting Lucid Emacs, and merging in
  138. bug fixes and new features from the Free Software Foundation branch as
  139. appropriate; we did not plan to discard any of the functionality that we
  140. implemented which Richard Stallman of the Free Software Foundation has
  141. chosen not to include in his version.
  142.  
  143. However, events have overtaken us, and Lucid, Inc. has effectively ceased
  144. doing business and is (September 1994) in the process of being sold.  Our
  145. efforts on Lucid Emacs have also ceased and we've turned over the continued
  146. enhancement of Lucid Emacs to the University of Illinois under Chuck
  147. Thompson, a member of the Lucid Emacs team and a maintainer of Epoch.
  148. At the same time, Lucid Emacs has been renamed XEmacs to reflect the
  149. substantial contribution of the University of Illinois with the support of
  150. Sun Microsystems.
  151.  
  152. Certain elements of Lucid Emacs, or derivatives of them, have been ported to
  153. the FSF GNU Emacs.  We have not been doing work in this direction, because
  154. we feel that Lucid Emacs has a cleaner and more extensible substrate, and
  155. that any kind of merger between the two branches would be far easier by
  156. merging the Free Software Foundation changes into our version than the other
  157. way around.
  158.  
  159. We were working closely with the Epoch developers to merge in the
  160. remaining Epoch functionality which Lucid Emacs does not yet have.  Epoch
  161. and Lucid Emacs will soon be one and the same thing.  Work is being done on
  162. a compatibility package which will allow Epoch 4 code to run in XEmacs with
  163. little or no change.  (As of 19.8, Lucid Emacs is running a descendant of
  164. the Epoch redisplay engine.)
  165.  
  166. ** Why Another Version of Emacs?  (The SunPro Point of View)
  167. ============================================================
  168.  
  169. Emacs 18 has been around for a long, long time.  Version 19 was supposed to
  170. be the successor to Emacs 18 with X support.  It was going to be available
  171. "real soon" for a long time (some people remember hearing about v19 as early
  172. as 1984!), but it never came out.  v19 development was going very, very
  173. slowly, and from the outside it seemed that it was not moving at all.  In
  174. the meantime other people gave up waiting for v19 and decided to build their
  175. own X-aware Emacsen.  The most important of these was probably Epoch, which
  176. came from the University of Illinois and was based on v18.
  177.  
  178. Around three years ago we decided that we wanted an integrated editor.  We
  179. contracted with the University of Illinois to provide a number of basic
  180. enhancements to the functionality in Epoch.  The University of Illinois
  181. initially was planning to deliver this on top of Epoch code.
  182.  
  183. In the meantime (actually some time before we talked with the University of
  184. Illinois) Lucid had decided that it also wanted to provide an integrated
  185. environment with an integrated editor.  Lucid decided that the Version 19
  186. basis was a better one than Version 18 and thus decided not to use Epoch but
  187. instead work with Richard Stallman, the head of the Free Software Foundation
  188. and principle author of Emacs, on getting Version 19 out.  At some point
  189. Stallman and Lucid parted ways.  Lucid kept working and got a Version 19 out
  190. that they called Lucid Emacs 19.
  191.  
  192. After Lucid's v19 came out it became clear to us (the University of Illinois
  193. and SunPro) that the right thing to do was to push for an integration of
  194. both Lucid Emacs and Epoch, and to get the deliverables that we were asking
  195. from the University of Illinois on top of this integrated platform.  Through
  196. the last two years, SunPro has been actively supporting this product and has
  197. been investing a comparable amount of effort into it as Lucid has.
  198. Substantial portions of the current code have originated under the support
  199. of SunPro, either directly in SunPro, or in the University of Illinois but
  200. paid for by us.  This code was kept away from Lucid for a while, but later
  201. was made available to them.  Initially Lucid didn't know that we were
  202. supporting UofI, but later we were open about it.
  203.  
  204. Eventually, all development source trees were synched up.  Currently, there
  205. is basically no difference in the source trees between what is at the
  206. University of Illinois and SunPro.
  207.  
  208. SunPro originally called the integrated product ERA, for "Emacs Rewritten
  209. Again".  At some point, SunPro and Lucid came to an agreement to find a name
  210. for the product that was not specific to either company.  An additional
  211. constraint that Lucid placed on the name was that it must contain the word
  212. "Emacs" in it -- thus "ERA" was not acceptable.  The agreed-upon name was
  213. "XEmacs", and this is what the product has been called starting with the
  214. 19.11 release.
  215.  
  216.  
  217. * What's Different?
  218. ===================
  219.  
  220.  
  221. ** Differences between XEmacs and FSF Emacs 19
  222. ==============================================
  223.  
  224. In XEmacs, events are first-class objects.  FSF 19 represents them as
  225. integers, which obscures the differences between a key gesture and the
  226. ancient ASCII code used to represent a particular overlapping subset of them.
  227.  
  228. In XEmacs, keymaps are first-class opaque objects.  FSF 19 represents them as
  229. complicated combinations of association lists and vectors.  If you use the
  230. advertised functional interface to manipulation of keymaps, the same code
  231. will work in XEmacs, Emacs 18, and and FSF Emacs 19; if your code depends on
  232. the underlying implementation of keymaps, it will not.
  233.  
  234. XEmacs uses "extents" to represent all non-textual aspects of buffers; FSF 19
  235. uses two distinct objects, "text properties" and "overlays", which divide up
  236. the functionality between them.  Extents are a superset of the functionality
  237. of the two FSF data types.  A large subset of the FSF 19 interface to text
  238. properties is supported in xemacs (with extents being the underlying
  239. representation).
  240.  
  241. Extents can be made to be copied into strings, and thus restored by kill
  242. and yank.  Thus, one can specify this behavior on either "extents" or
  243. "text properties", whereas in FSF 19 text properties always have this
  244. behavior and overlays never do.
  245.  
  246. Many more packages are provided standard with XEmacs than with FSF 19.
  247.  
  248. Pixmaps of arbitrary size can be embedded in a buffer.
  249.  
  250. Variable width fonts work.
  251.  
  252. The height of a line is the height of the tallest font on that line, instead
  253. of all lines having the same height.
  254.  
  255. XEmacs uses the MIT "Xt" toolkit instead of raw Xlib calls, which
  256. makes it be a more well-behaved X citizen (and also improves
  257. portability).  A result of this is that it is possible to include
  258. other Xt "Widgets" in the XEmacs window.  Also, XEmacs understands the
  259. standard Xt command-line arguments.
  260.  
  261. XEmacs provides support for ToolTalk on systems that have it.
  262.  
  263. XEmacs can ask questions using popup dialog boxes.  Any command executed from
  264. a menu will ask yes/no questions with dialog boxes, while commands executed
  265. via the keyboard will use the minibuffer.
  266.  
  267. XEmacs has a built-in toolbar.  Four toolbars can actually be configured:
  268. top, bottom, left, and right toolbars.
  269.  
  270. XEmacs has vertical and horizontal scrollbars.  Unlike in FSF 19 (which
  271. provides a primitive form of vertical scrollbar), these are true toolkit
  272. scrollbars.  A look-alike Motif scrollbar is provided for those who
  273. don't have Motif. (Even for those who do, the look-alike may be preferable
  274. as it is faster.)
  275.  
  276. If you're running on a machine with audio hardware, you can specify sound 
  277. files for XEmacs to play instead of the default X beep.  See the documentation
  278. of the function load-sound-file and the variable sound-alist.
  279.  
  280. An XEmacs frame can be placed within an "external client widget" managed by
  281. another application.  This allows an application to use an XEmacs frame as its
  282. text pane rather than the standard Text widget that is provided with Motif or
  283. Athena.  XEmacs supports Motif applications, generic Xt (e.g. Athena)
  284. applications, and raw Xlib applications.
  285.  
  286. Here are some more specifics about the XEmacs implementation:
  287.  
  288. *** The Input Model
  289. -------------------
  290.  
  291. The fundamental unit of input is an "event" instead of a character.  An
  292. event is a new data type that contains several pieces of information.
  293. There are several kinds of event, and corresponding accessor and utility
  294. functions.  We tried to abstract them so that they would apply equally
  295. well to a number of window systems.
  296.  
  297. NOTE: All timestamps are measured as milliseconds since Emacs started.
  298.  
  299.  key_press_event    
  300.     event_channel    A token representing which keyboard generated it.
  301.             For this kind of event, this is a frame object.
  302.             (This is for eventual support of multiple displays.)
  303.     timestamp        When it happened
  304.     key            What keysym this is; an integer or a symbol.
  305.             If this is an integer, it will be in the printing
  306.             ASCII range: >32 and <127.
  307.     modifiers        Bucky-bits on that key: control, meta, etc.
  308.             For most keys, Shift is not a bit; that is implicit
  309.             in the keyboard layout.
  310.  
  311.  button_press_event
  312.  button_release_event
  313.     event_channel    A token representing which mouse generated it.
  314.             For this kind of event, this is a frame object.
  315.     timestamp        When it happened
  316.     button        What button went down or up.
  317.     modifiers        Bucky-bits on that button: shift, control, meta, etc.
  318.     x, y        Where it was at the button-state-change (in pixels).
  319.  
  320.  pointer_motion_event
  321.     event_channel    A token representing which mouse generated it.
  322.             For this kind of event, this is a frame object.
  323.     timestamp        When it happened
  324.     x, y        Where it was after it moved (in pixels).
  325.     modifiers        Bucky-bits down when the motion was detected.
  326.             (Possibly not all window systems will provide this?)
  327.  
  328.  process_event
  329.     timestamp        When it happened
  330.     process        the emacs "process" object in question
  331.  
  332.  timeout_event
  333.     timestamp        Now (really, when the timeout was signaled)
  334.     interval_id        The ID returned when the associated call to
  335.             add_timeout_cb() was made
  336.     ------ the rest of the fields are filled in by Emacs -----
  337.     id_number        The Emacs timeout ID for this timeout (more
  338.             than one timeout event can have the same value
  339.             here, since Emacs timeouts, as opposed to
  340.             add_timeout_cb() timeouts, can resignal
  341.             themselves)
  342.     function        An elisp function to call when this timeout is
  343.             processed.
  344.     object        The object passed to that function.
  345.  
  346.  eval_event
  347.     timestamp        When it happened
  348.     function        An elisp function to call with this event object.
  349.     object        Anything.
  350.             This kind of event is used internally; sometimes the
  351.             window system interface would like to inform emacs of
  352.             some user action (such as focusing on another frame)
  353.             but needs that to happen synchronously with the other
  354.             user input, like keypresses.  This is useful when
  355.             events are reported through callbacks rather
  356.             than in the standard event stream.
  357.  
  358.  misc_user_event
  359.     timestamp        When it happened
  360.     function        An elisp function to call with this event object.
  361.     object        Anything.
  362.             This is similar to an eval_event, except that it is
  363.             generated by user actions: selections in the
  364.             menubar or scrollbar actions.  It is a "command"
  365.             event, like key and mouse presses (and unlike mouse
  366.             motion, process output, and enter and leave window
  367.             hooks).  In many ways, eval_events are not the same
  368.             as keypresses or misc_user_events.
  369.  
  370.  magic_event
  371.             No user-serviceable parts within.  This is for things
  372.             like KeymapNotify and ExposeRegion events and so on
  373.             that emacs itself doesn't care about, but which it
  374.             must do something with for proper interaction with
  375.             the window system.
  376.  
  377.             Magic_events are handled somewhat asynchronously, just
  378.             like subprocess filters.  However, occasionally a 
  379.             magic_event needs to be handled synchronously; in that
  380.             case, the asynchronous handling of the magic_event will
  381.             push an eval_event back onto the queue, which will be 
  382.             handled synchronously later.  This is one of the
  383.             reasons why eval_events exist; I'm not entirely happy
  384.             with this aspect of this event model.
  385.  
  386.  
  387. The function `next-event' blocks and returns one of the above-described 
  388. event objects.  The function `dispatch-event' takes an event and processes
  389. it in the appropriate way.
  390.  
  391. For a process-event, dispatch-event calls the process's handler; for a
  392. mouse-motion event, the mouse-motion-handler hook is called, and so on.
  393. For magic-events, dispatch-event does window-system-dependent things,
  394. including calling some non-window-system-dependent hooks: map-frame-hook,
  395. unmap-frame-hook, mouse-enter-frame-hook, and mouse-leave-frame-hook.
  396.  
  397. The function `next-command-event' calls `next-event' until it gets a key or
  398. button from the user (that is, not a process, motion, timeout, or magic
  399. event).  If it gets an event that is not a key or button, it calls
  400. `dispatch-event' on it immediately and reads another one.  The
  401. next-command-event function could be implemented in Emacs Lisp, though it
  402. isn't.  Generally one should call `next-command-event' instead of
  403. `next-event'.
  404.  
  405. read-char calls next-command-event; if it doesn't get an event that can be
  406. converted to an ASCII character, it signals an error.  Otherwise it returns
  407. an integer.
  408.  
  409. The variable `last-command-char' always contains an integer, or nil (if the
  410. last read event has no ASCII equivalent, as when it is a mouse-click or a
  411. non-ASCII character chord.)
  412.  
  413. The new variable `last-command-event' holds an event object, that could be
  414. a non-ASCII character, a button click, a menu selection, etc.
  415.  
  416. The variable `unread-command-char' no longer exists, and has been replaced
  417. by `unread-command-events'.  With the new event model, it is incorrect for
  418. code to do (setq unread-command-char (read-char)), because all user-input
  419. can't be represented as ASCII characters.  *** This is an incompatible 
  420. change.  Code which sets `unread-command-char' must be updated to use the
  421. combination of `next-command-event' and `unread-command-events' instead.
  422.  
  423. The functions `this-command-keys' and `recent-keys' return a vector of
  424. event objects, instead of a string of ASCII characters.  *** This also
  425. is an incompatible change.
  426.  
  427. Almost nothing happens at interrupt level; the SIGIO handler simply sets a
  428. flag, and later, the X event queue is scanned for KeyPress events which map
  429. to ^G.  All redisplay happens in the main thread of the process.
  430.  
  431.  
  432. *** Keymaps
  433. -----------
  434.  
  435. Instead of keymaps being alists or obarrays, they are a new primary data
  436. type.  The only user access to the contents of a keymap is through the
  437. existing keymap-manipulation functions, and a new function, map-keymap.
  438. This means that existing code that manipulates keymaps may need to 
  439. be changed.
  440.  
  441. One of our goals with the new input and keymap code was to make more
  442. character combinations available for binding, besides just ASCII and
  443. function keys.  We want to be able bind different commands to Control-a 
  444. and Control-Shift-a; we also want it to be possible for the keys Control-h
  445. and Backspace (and Control-M and Return, and Control-I and Tab, etc) to
  446. be distinct.
  447.  
  448. One of the most common complaints that new Emacs users have is that backspace
  449. is help.  The answer is to play around with the keyboard-translate-table, or
  450. be lucky enough to have a system administrator who has done this for you
  451. already; but if it were possible to bind backspace and C-h to different
  452. things, then (under a window manager at least) both backspace and delete
  453. would delete a character, and ^H would be help.  There's no need to deal 
  454. with xmodmap, kbd-translate-table, etc.
  455.  
  456. Here are some more examples: suppose you want to bind one function to Tab, 
  457. and another to Control-Tab.  This can't be done if Tab and Control-I are the
  458. same thing.  What about control keys that have no ASCII equivalent, like
  459. Control-< ?  One might want that to be bound to set-mark-at-point-min.  We
  460. want M-C-Backspace to be kill-backward-sexp.  But we want M-Backspace to be
  461. kill-backward-word.  Again, this can't be done if Backspace and C-h are
  462. indistinguishable.
  463.  
  464. The user represents keys as a string of ASCII characters (when possible and
  465. convenient), or as a vector of event objects, or as a vector of "key 
  466. description lists", that looks like (control a), or (control meta delete) 
  467. or (shift f1).  The order of the modifier-names is not significant, so
  468. (meta control x) and (control meta x) are the same.
  469.  
  470. `define-key' knows how to take any of the above representations and store them
  471. into a keymap.  When Emacs wants to return a key sequence (this-command-keys,
  472. recent-keys, keyboard-macros, and read-key-sequence, for example) it returns
  473. a vector of event objects.  Keyboard macros can also be represented as ASCII
  474. strings or as vectors of key description lists.  
  475.  
  476. This is an incompatible change: code which calls `this-command-keys',
  477. `recent-keys', `read-key-sequence', or manipulates keyboard-macros probably
  478. needs to be changed so that it no longer assumes that the returned value is a
  479. string.
  480.  
  481. Control-Shift-a is specified as (control A), not (control shift a), since A
  482. is a two-case character.  But for keys that don't have an upper case
  483. version, like F1, Backspace, and Escape, you use the (shift backspace) syntax.
  484.  
  485. See the doc string for our version of define-key, reproduced below in the
  486. `Changed Functions' section.  Note that when the KEYS argument is a string,
  487. it has the same semantics as the v18 define-key.
  488.  
  489.  
  490. *** Xt Integration
  491. ------------------
  492.  
  493. The heart of the event loop is implemented in terms of the Xt event functions
  494. (specifically XtAppProcessEvent), and uses Xt's concept of timeouts and
  495. file-descriptor callbacks, eliminating a large amount of system-dependent code
  496. (Xt does it for you.)
  497.  
  498. If Emacs is compiled with support for X, it uses the Xt event loop even when
  499. Emacs is not running on an X display (the Xt event loop supports this).  This
  500. makes it possible to run Emacs on a dumb TTY, and later connect it to one or
  501. more X servers.  It should also be possible to later connect an existing Emacs
  502. process to additional TTY's, although this code is still experimental.  (Our
  503. intent at this point is not to have an Emacs that is being used by multiple
  504. people at the same time: it is to make it possible for someone to go home, log
  505. in on a dialup line, and connect to the same Emacs process that is running
  506. under X in their office without having to recreate their buffer state and so
  507. on.)
  508.  
  509. If Emacs is not compiled with support for X, then it instead uses more general
  510. code, something like what v18 does; but this way of doing things is a lot more
  511. modular.
  512.  
  513. (Linking Emacs with Xt seems to only add about 300k to the executable size,
  514. compared with an Emacs linked with Xlib only.)
  515.  
  516.  
  517. *** Region Highlighting
  518. -----------------------
  519.  
  520. If the variable `zmacs-regions' is true, then the region between point and
  521. mark will be highlighted when "active".  Those commands which push a mark
  522. (such as C-SPC, and C-x C-x) make the region become "active" and thus
  523. highlighted.  Most commands (all non-motion commands, basically) cause it to
  524. become non-highlighted (non-"active").  Commands that operate on the region
  525. (such as C-w, C-x C-l, etc.) only work if the region is in the highlighted
  526. state.
  527.  
  528. zmacs-activate-region-hook and zmacs-deactivate-region-hook are run at the
  529. appropriate times; under X, zmacs-activate-region-hook makes the X selection
  530. be the region between point and mark, thus doing two things at once: making
  531. the region and the X selection be the same; and making the region highlight
  532. in the same way as the X selection.
  533.  
  534. If `zmacs-regions' is true, then the `mark-marker' command returns nil unless
  535. the region is currently in the active (highlighted) state.  With an argument
  536. of t, this returns the mark (if there is one) regardless of the active-region
  537. state.  You should *generally* not use the mark unless the region is active,
  538. if the user has expressed a preference for the active-region model.  Watch
  539. out!  Moving this marker changes the mark position.  If you set the marker not
  540. to point anywhere, the buffer will have no mark.
  541.  
  542. In this way, the primary selection is a fairly transitory entity; but
  543. when something is copied to the kill ring, it is made the Clipboard
  544. selection.  It is also stored into CUT_BUFFER0, for compatibility with
  545. X applications that don't understand selections (like Emacs18).
  546.  
  547. Compatibility note: if you have code which uses (mark) or (mark-marker),
  548. then you need to either: change those calls to (mark t) or (mark-marker t);
  549. or simply bind `zmacs-regions' to nil around the call to mark or mark-marker.
  550. This is probably the best solution, since it will work in Emacs 18 as well.
  551.  
  552.  
  553. *** Menubars and Dialog Boxes
  554. -----------------------------
  555.  
  556. Here is an example of a menubar definition:
  557.  
  558. (defvar default-menubar
  559.   '(("File"     ["Open File..."         find-file               t]
  560.                 ["Save Buffer"          save-buffer             t]
  561.                 ["Save Buffer As..."    write-file              t]
  562.                 ["Revert Buffer"        revert-buffer           t]
  563.                 "-----"
  564.                 ["Print Buffer"         lpr-buffer              t]
  565.                 "-----"
  566.                 ["Delete Frame"         delete-frame            t]
  567.                 ["Kill Buffer..."       kill-buffer             t]
  568.                 ["Exit Emacs"           save-buffers-kill-emacs t]
  569.                 )
  570.     ("Edit"     ["Undo"                 advertised-undo         t]
  571.                 ["Cut"                  kill-primary-selection  t]
  572.                 ["Copy"                 copy-primary-selection  t]
  573.                 ["Paste"                yank-clipboard-selection t]
  574.                 ["Clear"                delete-primary-selection t]
  575.                 )
  576.     ...))
  577.  
  578. The first element of each menu item is the string to print on the menu.
  579.  
  580. The second element is the callback function; if it is a symbol, it is
  581. invoked with `call-interactively.'  If it is a list, it is invoked with
  582. `eval'.  
  583.  
  584. If the second element is a symbol, then the menu also displays the key that
  585. is bound to that command (if any).
  586.  
  587. The third element of the menu items determines whether the item is selectable.
  588. It may be t, nil, or a form to evaluate.  Also, a hook is run just before a
  589. menu is exposed, which can be used to change the value of these slots. 
  590. For example, there is a hook that makes the "undo" menu item be selectable
  591. only in the cases when `advertised-undo' would not signal an error.  
  592.  
  593. Menus may have other menus nested within them; they will cascade.
  594.  
  595. There are utility functions for adding items to menus, deleting items,
  596. disabling them, etc.
  597.  
  598. The function `popup-menu' takes a menu description and pops it up.  
  599.  
  600. The function `popup-dialog-box' takes a dialog-box description and pops 
  601. it up.  Dialog box descriptions look a lot like menu descriptions.
  602.  
  603. The menubar, menu, and dialog-box code is implemented as a library, 
  604. with an interface which hides the toolkit that implements it.  
  605.  
  606.  
  607. *** Isearch Changes
  608. -------------------
  609.  
  610. Isearch has been reimplemented in a different way, adding some new features,
  611. and causing a few incompatible changes.
  612.  
  613.  -  the old isearch-*-char variables are no longer supported.  In the old
  614.     system, one could make ^A mean "repeat the search" by doing something
  615.     like (setq search-repeat-char ?C-a).  In the new system, this is 
  616.     accomplished with 
  617.  
  618.        (define-key isearch-mode-map "\C-a" 'isearch-repeat-forward)
  619.  
  620.  -  The advantage of using the normal keymap mechanism for this is that you
  621.     can bind more than one key to an isearch command: for example, both C-a
  622.     and C-s could do the same thing inside isearch mode.  You can also bind
  623.     multi-key sequences inside of isearch mode, and bind non-ASCII keys.
  624.     For example, to use the F1 key to terminate a search:
  625.  
  626.        (define-key isearch-mode-map 'f1 'isearch-exit)
  627.  
  628.     or to make ``C-c C-c'' terminate a search:
  629.  
  630.        (define-key isearch-mode-map "\C-c\C-c" 'isearch-exit)
  631.  
  632.  -  If isearch is behaving case-insensitively (the default) and you type an
  633.     upper case character, then the search will become case-sensitive.  This
  634.     can be disabled by setting `search-caps-disable-folding' to nil.
  635.  
  636.  -  There is a history ring of the strings previously searched for; typing
  637.     M-p or M-n while searching will cycle through this ring.  Typing M-TAB
  638.     will do completion across the set of items in the history ring.
  639.  
  640.  -  The ESC key is no longer used to terminate an incremental search.  The
  641.     RET key should be used instead.  This change is necessary for it to be
  642.     possible to bind "meta" characters to isearch commands.
  643.  
  644.  
  645. *** Startup Code Changes
  646. ------------------------
  647.  
  648. The initial X frame is mapped before the user's .emacs file is executed.
  649. Without this, there is no way for the user to see any error messages
  650. generated by their .emacs file, any windows created by the .emacs file
  651. don't show up, and the copyleft notice isn't shown.
  652.  
  653. The default values for load-path, exec-path, lock-directory, and
  654. Info-directory-list are not (necessarily) built into Emacs, but are
  655. computed at startup time.  
  656.  
  657. First, Emacs looks at the directory in which its executable file resides:
  658.  
  659.   o  If that directory contains subdirectories named "lisp" and "lib-src",
  660.      then those directories are used as the lisp library and exec directory.
  661.  
  662.   o  If the parent of the directory in which the emacs executable is located
  663.      contains "lisp" and "lib-src" subdirectories, then those are used.
  664.  
  665.   o  If ../lib/xemacs-<version> (starting from the directory in which the
  666.      emacs executable is located) contains a "lisp" subdirectory and either
  667.      a "lib-src" subdirectory or a <configuration-name> subdirectory, then
  668.      those are used.
  669.  
  670.   o  If the emacs executable that was run is a symbolic link, then the link
  671.      is chased, and the resultant directory is checked as above.
  672.  
  673. (Actually, it doesn't just look for "lisp/", it looks for "lisp/prim/",
  674. which reduces the chances of a false positive.)
  675.  
  676. If the lisp directory contains subdirectories, they are added to the default
  677. load-path as well.  If the site-lisp directory exists and contains
  678. subdirectories, they are then added.  Subdirectories whose names begin with
  679. a dot or a hyphen are not added to the load-path.
  680.  
  681. These heuristics fail if the Emacs binary was copied from the main Emacs
  682. tree to some other directory, and links for the lisp directory were not put
  683. in.  This isn't much of a restriction: either make there be subdirectories
  684. (or symbolic links) of the directory of the emacs executable, or make the
  685. "installed" emacs executable be a symbolic link to an executable in a more
  686. appropriate directory structure.  For example, this setup works:
  687.  
  688.     /usr/local/xemacs/xemacs*           ; The executable.
  689.     /usr/local/xemacs/lisp/             ; The associated directories.
  690.     /usr/local/xemacs/etc/              ; Any of the files in this list
  691.     /usr/local/xemacs/lock/             ; could be symbolic links as well.
  692.     /usr/local/xemacs/info/
  693.  
  694. As does this:
  695.  
  696.     /usr/local/bin/xemacs -> ../xemacs/src/xemacs-19.13 ; A link...
  697.     /usr/local/xemacs/src/xemacs-19.13*                 ; The executable,
  698.     /usr/local/xemacs/lisp/                             ; and the rest of
  699.     /usr/local/xemacs/etc/                              ; the the source
  700.     /usr/local/xemacs/lock/                             ; tree.
  701.     /usr/local/xemacs/info/
  702.  
  703. This configuration might be used for a multi-architecture installation; assume
  704. that $LOCAL refers to a directory which contains only files specific to a 
  705. particular architecture (i.e., executables) and $SHARED refers to those files 
  706. which are not machine specific (i.e., lisp code and documentation.)
  707.  
  708.     $LOCAL/bin/xemacs@ -> $LOCAL/xemacs-19.13/xemacs*
  709.     $LOCAL/xemacs-19.13/lisp@ -> $SHARED/xemacs-19.13/lisp/
  710.     $LOCAL/xemacs-19.13/etc@  -> $SHARED/xemacs-19.13/etc/
  711.     $LOCAL/xemacs-19.13/info@ -> $SHARED/xemacs-19.13/info/
  712.  
  713. The following would also work, but the above is probably more attractive:
  714.  
  715.     $LOCAL/bin/xemacs*
  716.     $LOCAL/bin/lisp@ -> $SHARED/xemacs-19.13/lisp/
  717.     $LOCAL/bin/etc@  -> $SHARED/xemacs-19.13/etc/
  718.     $LOCAL/bin/info@ -> $SHARED/xemacs-19.13/info/
  719.  
  720. If Emacs can't find the requisite directories, it writes a message like this
  721. (or some appropriate subset of it) to stderr:
  722.  
  723.   WARNING:
  724.   couldn't find an obvious default for load-path, exec-directory, and
  725.   lock-directory, and there were no defaults specified in paths.h when
  726.   Emacs was built.  Perhaps some directories don't exist, or the Emacs
  727.   executable, /cadillac-th/jwz/somewhere/xemacs is in a strange place?
  728.  
  729.   Without both exec-directory and load-path, Emacs will be very broken.
  730.   Consider making a symbolic link from /cadillac-th/jwz/somewhere/etc
  731.   to wherever the appropriate Emacs etc/ directory is, and from
  732.   /cadillac-th/jwz/somewhere/lisp/ to wherever the appropriate Emacs
  733.   lisp library is.
  734.  
  735.   Without lock-directory set, file locking won't work.  Consider
  736.   creating /cadillac-th/jwz/somewhere/lock as a directory or symbolic
  737.   link for use as the lock directory.
  738.  
  739. The default installation tree is the following:
  740.  
  741.     /usr/local/bin/b2m                          ;
  742.                    ctags                        ; executables that
  743.                    emacsclient                  ; should be in
  744.                    etags                        ; user's path
  745.                    xemacs -> xemacs-<version>   ;
  746.                    xemacs                       ;
  747.     /usr/local/lib/xemacs/site-lisp
  748.     /usr/local/lib/xemacs/lock
  749.     /usr/local/lib/xemacs-<version>/etc         ; architecture ind. files
  750.     /usr/local/lib/xemacs-<version>/info
  751.     /usr/local/lib/xemacs-<version>/lisp
  752.     /usr/local/lib/xemacs-<version>/<configuration>  ; binaries emacs may run
  753.  
  754.  
  755. *** X Resources
  756. ---------------
  757.  
  758. (Note: This section is copied verbatim from the XEmacs Reference Manual.)
  759.  
  760.    The Emacs resources are generally set per-frame. Each Emacs frame
  761. can have its own name or the same name as another, depending on the
  762. name passed to the `make-frame' function.
  763.  
  764.    You can specify resources for all frames with the syntax:
  765.  
  766.      Emacs*parameter: value
  767.  
  768. or
  769.  
  770.      Emacs*EmacsFrame.parameter:value
  771.  
  772. You can specify resources for a particular frame with the syntax:
  773.  
  774.      Emacs*FRAME-NAME.parameter: value
  775.  
  776.  
  777. **** Geometry Resources
  778. -----------------------
  779.  
  780.    To make the default size of all Emacs frames be 80 columns by 55
  781. lines, do this:
  782.  
  783.      Emacs*EmacsFrame.geometry: 80x55
  784.  
  785. To set the geometry of a particular frame named `fred', do this:
  786.  
  787.      Emacs*fred.geometry: 80x55
  788.  
  789. Important! Do not use the following syntax:
  790.  
  791.      Emacs*geometry: 80x55
  792.  
  793. You should never use `*geometry' with any X application. It does not
  794. say "make the geometry of Emacs be 80 columns by 55 lines."  It really
  795. says, "make Emacs and all subwindows thereof be 80x55 in whatever units
  796. they care to measure in."  In particular, that is both telling the
  797. Emacs text pane to be 80x55 in characters, and telling the menubar pane
  798. to be 80x55 pixels, which is surely not what you want.
  799.  
  800.    As a special case, this geometry specification also works (and sets
  801. the default size of all Emacs frames to 80 columns by 55 lines):
  802.  
  803.      Emacs.geometry: 80x55
  804.  
  805. since that is the syntax used with most other applications (since most
  806. other applications have only one top-level window, unlike Emacs).  In
  807. general, however, the top-level shell (the unmapped ApplicationShell
  808. widget named `Emacs' that is the parent of the shell widgets that
  809. actually manage the individual frames) does not have any interesting
  810. resources on it, and you should set the resources on the frames instead.
  811.  
  812.    The `-geometry' command-line argument sets only the geometry of the
  813. initial frame created by Emacs.
  814.  
  815.    A more complete explanation of geometry-handling is
  816.  
  817.    * The `-geometry' command-line option sets the `Emacs.geometry'
  818.      resource, that is, the geometry of the ApplicationShell.
  819.  
  820.    * For the first frame created, the size of the frame is taken from
  821.      the ApplicationShell if it is specified, otherwise from the
  822.      geometry of the frame.
  823.  
  824.    * For subsequent frames, the order is reversed: First the frame, and
  825.      then the ApplicationShell.
  826.  
  827.    * For the first frame created, the position of the frame is taken
  828.      from the ApplicationShell (`Emacs.geometry') if it is specified,
  829.      otherwise from the geometry of the frame.
  830.  
  831.    * For subsequent frames, the position is taken only from the frame,
  832.      and never from the ApplicationShell.
  833.  
  834.    This is rather complicated, but it does seem to provide the most
  835. intuitive behavior with respect to the default sizes and positions of
  836. frames created in various ways.
  837.  
  838.  
  839. **** Iconic Resources
  840. ---------------------
  841.  
  842.    Analogous to `-geometry', the `-iconic' command-line option sets the
  843. iconic flag of the ApplicationShell (`Emacs.iconic') and always applies
  844. to the first frame created regardless of its name.  However, it is
  845. possible to set the iconic flag on particular frames (by name) by using
  846. the `Emacs*FRAME-NAME.iconic' resource.
  847.  
  848.  
  849. **** Resource List
  850. ------------------
  851.  
  852.    Emacs frames accept the following resources:
  853.  
  854. `geometry' (class `Geometry'): string
  855.      Initial geometry for the frame.  *Note Geometry Resources:: for a
  856.      complete discussion of how this works.
  857.  
  858. `iconic' (class `Iconic'): boolean
  859.      Whether this frame should appear in the iconified state.
  860.  
  861. `internalBorderWidth' (class `InternalBorderWidth'): int
  862.      How many blank pixels to leave between the text and the edge of the
  863.      window.
  864.  
  865. `interline' (class `Interline'): int
  866.      How many pixels to leave between each line (may not be
  867.      implemented).
  868.  
  869. `menubar' (class `Menubar'): boolean
  870.      Whether newly-created frames should initially have a menubar.  Set
  871.      to true by default.
  872.  
  873. `initiallyUnmapped' (class `InitiallyUnmapped'): boolean
  874.      Whether XEmacs should leave the initial frame unmapped when it
  875.      starts up.  This is useful if you are starting XEmacs as a server
  876.      (e.g. in conjunction with gnuserv or the external client widget).
  877.      You can also control this with the `-unmapped' command-line option.
  878.  
  879. `barCursor' (class `BarColor'): boolean
  880.      Whether the cursor should be displayed as a bar, or the
  881.      traditional box.
  882.  
  883. `cursorColor' (class `CursorColor'): color-name
  884.      The color of the text cursor.
  885.  
  886. `textPointer' (class `Cursor'): cursor-name
  887.      The cursor to use when the mouse is over text.  This resource is
  888.      used to initialize the variable `x-pointer-shape'.
  889.  
  890. `selectionPointer' (class `Cursor'): cursor-name
  891.      The cursor to use when the mouse is over a selectable text region
  892.      (an extent with the `highlight' property; for example, an Info
  893.      cross-reference).  This resource is used to initialize the variable
  894.      `x-selection-pointer-shape'.
  895.  
  896. `spacePointer' (class `Cursor'): cursor-name
  897.      The cursor to use when the mouse is over a blank space in a buffer
  898.      (that is, after the end of a line or after the end-of-file).  This
  899.      resource is used to initialize the variable
  900.      `x-nontext-pointer-shape'.
  901.  
  902. `modeLinePointer' (class `Cursor'): cursor-name
  903.      The cursor to use when the mouse is over a mode line.  This
  904.      resource is used to initialize the variable `x-mode-pointer-shape'.
  905.  
  906. `gcPointer' (class `Cursor'): cursor-name
  907.      The cursor to display when a garbage-collection is in progress.
  908.      This resource is used to initialize the variable
  909.      `x-gc-pointer-shape'.
  910.  
  911. `scrollbarPointer' (class `Cursor'): cursor-name
  912.      The cursor to use when the mouse is over the scrollbar.  This
  913.      resource is used to initialize the variable
  914.      `x-scrollbar-pointer-shape'.
  915.  
  916. `pointerColor' (class `Foreground'): color-name
  917. `pointerBackground' (class `Background'): color-name
  918.      The foreground and background colors of the mouse cursor.  These
  919.      resources are used to initialize the variables
  920.      `x-pointer-foreground-color' and `x-pointer-background-color'.
  921.  
  922. `scrollBarWidth' (class `ScrollBarWidth'): integer
  923.      How wide the vertical scrollbars should be, in pixels; 0 means no
  924.      vertical scrollbars.  You can also use a resource specification of
  925.      the form `*scrollbar.width', or the usual toolkit scrollbar
  926.      resources: `*XmScrollBar.width' (Motif), `*XlwScrollBar.width'
  927.      (Lucid), or `*Scrollbar.thickness' (Athena).  We don't recommend
  928.      that you use the toolkit resources, though, because they're
  929.      dependent on how exactly your particular build of XEmacs was
  930.      configured.
  931.  
  932. `scrollBarHeight' (class `ScrollBarHeight'): integer
  933.      How high the horizontal scrollbars should be, in pixels; 0 means no
  934.      horizontal scrollbars.  You can also use a resource specification
  935.      of the form `*scrollbar.height', or the usual toolkit scrollbar
  936.      resources: `*XmScrollBar.height' (Motif), `*XlwScrollBar.height'
  937.      (Lucid), or `*Scrollbar.thickness' (Athena).  We don't recommend
  938.      that you use the toolkit resources, though, because they're
  939.      dependent on how exactly your particular build of XEmacs was
  940.      configured.
  941.  
  942. `scrollBarPlacement' (class `ScrollBarPlacement'): string
  943.      Where the horizontal and vertical scrollbars should be positioned.
  944.      This should be one of the four strings `bottom-left',
  945.      `bottom-right', `top-left', and `top-right'.  Default is
  946.      `bottom-right' for the Motif and Lucid scrollbars and
  947.      `bottom-left' for the Athena scrollbars.
  948.  
  949. `topToolBarHeight' (class `TopToolBarHeight'): integer
  950. `bottomToolBarHeight' (class `BottomToolBarHeight'): integer
  951. `leftToolBarWidth' (class `LeftToolBarWidth'): integer
  952. `rightToolBarWidth' (class `RightToolBarWidth'): integer
  953.      Height and width of the four possible toolbars.
  954.  
  955. `topToolBarShadowColor' (class `TopToolBarShadowColor'): color-name
  956. `bottomToolBarShadowColor' (class `BottomToolBarShadowColor'): color-name
  957.      Color of the top and bottom shadows for the toolbars.  NOTE: These
  958.      resources do *not* have anything to do with the top and bottom
  959.      toolbars (i.e. the toolbars at the top and bottom of the frame)!
  960.      Rather, they affect the top and bottom shadows around the edges of
  961.      all four kinds of toolbars.
  962.  
  963. `topToolBarShadowPixmap' (class `TopToolBarShadowPixmap'): pixmap-name
  964. `bottomToolBarShadowPixmap' (class `BottomToolBarShadowPixmap'): pixmap-name
  965.      Pixmap of the top and bottom shadows for the toolbars.  If set,
  966.      these resources override the corresponding color resources. NOTE:
  967.      These resources do *not* have anything to do with the top and
  968.      bottom toolbars (i.e. the toolbars at the top and bottom of the
  969.      frame)!  Rather, they affect the top and bottom shadows around the
  970.      edges of all four kinds of toolbars.
  971.  
  972. `toolBarShadowThickness' (class `ToolBarShadowThickness'): integer
  973.      Thickness of the shadows around the toolbars, in pixels.
  974.  
  975. `visualBell' (class `VisualBell'): boolean
  976.      Whether XEmacs should flash the screen rather than making an
  977.      audible beep.
  978.  
  979. `bellVolume' (class `BellVolume'): integer
  980.      Volume of the audible beep.
  981.  
  982. `useBackingStore' (class `UseBackingStore'): boolean
  983.      Whether XEmacs should set the backing-store attribute of the X
  984.      windows it creates.  This increases the memory usage of the X
  985.      server but decreases the amount of X traffic necessary to update
  986.      the screen, and is useful when the connection to the X server goes
  987.      over a low-bandwidth line such as a modem connection.
  988.  
  989.  
  990. **** Face Resources
  991. -------------------
  992.  
  993.    The attributes of faces are also per-frame. They can be specified as:
  994.  
  995.      Emacs*FACE_NAME.parameter: value
  996.  
  997. or
  998.  
  999.      Emacs*FRAME_NAME.FACE_NAME.parameter: value
  1000.  
  1001. Faces accept the following resources:
  1002.  
  1003. `attributeFont' (class `AttributeFont'): font-name
  1004.      The font of this face.
  1005.  
  1006. `attributeForeground' (class `AttributeForeground'): color-name
  1007. `attributeBackground' (class `AttributeBackground'): color-name
  1008.      The foreground and background colors of this face.
  1009.  
  1010. `attributeBackgroundPixmap' (class `AttributeBackgroundPixmap'): file-name
  1011.      The name of an XBM file (or XPM file, if your version of Emacs
  1012.      supports XPM), to use as a background stipple.
  1013.  
  1014. `attributeUnderline' (class `AttributeUnderline'): boolean
  1015.      Whether text in this face should be underlined.
  1016.  
  1017.    All text is displayed in some face, defaulting to the face named
  1018. `default'.  To set the font of normal text, use
  1019. `Emacs*default.attributeFont'. To set it in the frame named `fred', use
  1020. `Emacs*fred.default.attributeFont'.
  1021.  
  1022.    These are the names of the predefined faces:
  1023.  
  1024. `default'
  1025.      Everything inherits from this.
  1026.  
  1027. `bold'
  1028.      If this is not specified in the resource database, Emacs tries to
  1029.      find a bold version of the font of the default face.
  1030.  
  1031. `italic'
  1032.      If this is not specified in the resource database, Emacs tries to
  1033.      find an italic version of the font of the default face.
  1034.  
  1035. `bold-italic'
  1036.      If this is not specified in the resource database, Emacs tries to
  1037.      find a bold-italic version of the font of the default face.
  1038.  
  1039. `modeline'
  1040.      This is the face that the modeline is displayed in.  If not
  1041.      specified in the resource database, it is determined from the
  1042.      default face by reversing the foreground and background colors.
  1043.  
  1044. `highlight'
  1045.      This is the face that highlighted extents (for example, Info
  1046.      cross-references and possible completions, when the mouse passes
  1047.      over them) are displayed in.
  1048.  
  1049. `left-margin'
  1050. `right-margin'
  1051.      These are the faces that the left and right annotation margins are
  1052.      displayed in.
  1053.  
  1054. `primary-selection'
  1055.      This is the face that mouse selections are displayed in.
  1056.  
  1057. `isearch'
  1058.      This is the face that the matched text being searched for is
  1059.      displayed in.
  1060.  
  1061. `info-node'
  1062.      This is the face of info menu items.  If unspecified, it is copied
  1063.      from `bold-italic'.
  1064.  
  1065. `info-xref'
  1066.      This is the face of info cross-references.  If unspecified, it is
  1067.      copied from `bold'. (Note that, when the mouse passes over a
  1068.      cross-reference, the cross-reference's face is determined from a
  1069.      combination of the `info-xref' and `highlight' faces.)
  1070.  
  1071.    Other packages might define their own faces; to see a list of all
  1072. faces, use any of the interactive face-manipulation commands such as
  1073. `set-face-font' and type `?' when you are prompted for the name of a
  1074. face.
  1075.  
  1076.    If the `bold', `italic', and `bold-italic' faces are not specified
  1077. in the resource database, then XEmacs attempts to derive them from the
  1078. font of the default face.  It can only succeed at this if you have
  1079. specified the default font using the XLFD (X Logical Font Description)
  1080. format, which looks like
  1081.  
  1082.      *-courier-medium-r-*-*-*-120-*-*-*-*-*-*
  1083.  
  1084. If you use any of the other, less strict font name formats, some of
  1085. which look like
  1086.  
  1087.      lucidasanstypewriter-12
  1088.      fixed
  1089.      9x13
  1090.  
  1091.    then XEmacs won't be able to guess the names of the bold and italic
  1092. versions.  All X fonts can be referred to via XLFD-style names, so you
  1093. should use those forms.  See the man pages for `X(1)', `xlsfonts(1)',
  1094. and `xfontsel(1)'.
  1095.  
  1096.  
  1097. **** Widgets
  1098. ------------
  1099.  
  1100.    There are several structural widgets between the terminal EmacsFrame
  1101. widget and the top level ApplicationShell; the exact names and types of
  1102. these widgets change from release to release (for example, they changed
  1103. between 19.8 and 19.9, 19.9 and 19.10, and 19.10 and 19.12) and are
  1104. subject to further change in the future, so you should avoid mentioning
  1105. them in your resource database.  The above-mentioned syntaxes should be
  1106. forward- compatible.  As of 19.13, the exact widget hierarchy is as
  1107. follows:
  1108.  
  1109.      INVOCATION-NAME            "shell"       "container"     FRAME-NAME
  1110.      x-emacs-application-class  "EmacsShell"  "EmacsManager"  "EmacsFrame"
  1111.  
  1112.    where INVOCATION-NAME is the terminal component of the name of the
  1113. XEmacs executable (usually `xemacs'), and `x-emacs-application-class'
  1114. is generally `Emacs'.
  1115.  
  1116.  
  1117. **** Menubar Resources
  1118. ----------------------
  1119.  
  1120.    As the menubar is implemented as a widget which is not a part of
  1121. XEmacs proper, it does not use the face mechanism for specifying fonts
  1122. and colors: It uses whatever resources are appropriate to the type of
  1123. widget which is used to implement it.
  1124.  
  1125.    If Emacs was compiled to use only the Motif-lookalike menu widgets,
  1126. then one way to specify the font of the menubar would be
  1127.  
  1128.      Emacs*menubar*font: *-courier-medium-r-*-*-*-120-*-*-*-*-*-*
  1129.  
  1130.    If the Motif library is being used, then one would have to use
  1131.  
  1132.      Emacs*menubar*fontList: *-courier-medium-r-*-*-*-120-*-*-*-*-*-*
  1133.  
  1134.    because the Motif library uses the `fontList' resource name instead
  1135. of `font', which has subtly different semantics.
  1136.  
  1137.    The same is true of the scrollbars: They accept whichever resources
  1138. are appropriate for the toolkit in use.
  1139.  
  1140.  
  1141. *** Source Code Highlighting
  1142. ----------------------------
  1143.  
  1144. It's possible to have your buffers "decorated" with fonts or colors
  1145. indicating syntactic structures (such as strings, comments, function names,
  1146. "reserved words", etc.).  In XEmacs, the preferred way to do this is with
  1147. font-lock-mode; activate it by adding the following code to your .emacs file:
  1148.  
  1149.         (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock)
  1150.         (add-hook 'c-mode-hook          'turn-on-font-lock)
  1151.         (add-hook 'c++-mode-hook        'turn-on-font-lock)
  1152.         (add-hook 'dired-mode-hook      'turn-on-font-lock)
  1153.         ...etc...
  1154.  
  1155. To customize it, see the descriptions of the function `font-lock-mode' and
  1156. the variables `font-lock-keywords', `c-font-lock-keywords', etc.
  1157.  
  1158. There exist several other source code highlighting packages, but font-lock
  1159. does does one thing that most others don't do: highlights as you type new
  1160. text; and one thing that no others do: bases part of its decoration on the
  1161. syntax table of the major mode.  Font-lock has C-level support to do this
  1162. efficiently, so it should also be significantly faster than the others.
  1163.  
  1164. If there's something that another highlighting package does that you can't
  1165. make font-lock do, let us know.  We would prefer to consolidate all of the
  1166. desired functionality into one package rather than ship several different
  1167. packages which do essentially the same thing in different ways.
  1168.  
  1169.  
  1170. ** Differences Between XEmacs and Emacs 18
  1171. ==========================================
  1172.  
  1173. Auto-configure support has been added, so it should be fairly easy to compile
  1174. XEmacs on different systems.  If you have any problems or feedback about
  1175. compiling on your system, please let us know.
  1176.  
  1177. We have reimplemented the basic input model in a more general way; instead of
  1178. X input being a special-case of the normal ASCII input stream, XEmacs has a
  1179. concept of "input events", and ASCII characters are a subset of that.  The
  1180. events that XEmacs knows about are not X events, but are a generalization of
  1181. them, so that XEmacs can eventually be ported to different window systems.
  1182.  
  1183. We have reimplemented keymaps so that sequences of events can be stored into
  1184. them instead of just ASCII codes; it is possible to, for example, bind
  1185. different commands to each of the chords Control-h, Control-H, Backspace,
  1186. Control-Backspace, and Super-Shift-Backspace.  Key bindings, function key
  1187. bindings, and mouse bindings live in the same keymaps.
  1188.  
  1189. Input and display of all ISO-8859-1 characters is supported.
  1190.  
  1191. You can have multiple X windows ("frames" in XEmacs terminology).
  1192.  
  1193. XEmacs has objects called "extents" and "faces", which are roughly
  1194. analogous to Epoch's "buttons," "zones," and "styles."  An extent is a
  1195. region of text (a start position and an end position) and a face is a
  1196. collection of textual attributes like fonts and colors.  Every extent
  1197. is displayed in some "face", so changing the properties of a face
  1198. immediately updates the display of all associated extents.  Faces can
  1199. be frame-local: you can have a region of text which displays with
  1200. completely different attributes when its buffer is viewed from a
  1201. different X window.
  1202.  
  1203. The display attributes of faces may be specified either in lisp or through
  1204. the X resource manager.
  1205.  
  1206. Pixmaps of arbitrary size can be embedded in a buffer.
  1207.  
  1208. Variable width fonts work.
  1209.  
  1210. The height of a line is the height of the tallest font on that line, instead
  1211. of all lines having the same height.
  1212.  
  1213. XEmacs uses the MIT "Xt" toolkit instead of raw Xlib calls, which
  1214. makes it be a more well-behaved X citizen (and also improves
  1215. portability).  A result of this is that it is possible to include
  1216. other Xt "Widgets" in the XEmacs window.  Also, XEmacs understands the
  1217. standard Xt command-line arguments.
  1218.  
  1219. XEmacs understands the X11 "Selection" mechanism; it's possible to define
  1220. and customize selection converter functions and new selection types from 
  1221. Emacs Lisp, without having to recompile XEmacs.
  1222.  
  1223. XEmacs provides support for ToolTalk on systems that have it.
  1224.  
  1225. XEmacs supports the Zmacs/Lispm style of region highlighting, where the
  1226. region between the point and mark is highlighted when in its "active" state.
  1227.  
  1228. XEmacs has a menubar, whose contents are customizable from emacs-lisp.
  1229. This menubar looks Motif-ish, but does not require Motif.  If you already
  1230. own Motif, however, you can configure XEmacs to use a *real* Motif menubar
  1231. instead.
  1232.  
  1233. XEmacs can ask questions using popup dialog boxes.  Any command executed from
  1234. a menu will ask yes/no questions with dialog boxes, while commands executed
  1235. via the keyboard will use the minibuffer.
  1236.  
  1237. XEmacs has vertical and horizontal scrollbars.
  1238.  
  1239. The initial load-path is computed at run-time, instead of at compile-time.
  1240. This means that if you move the XEmacs executable and associated directories
  1241. to somewhere else, you don't have to recompile anything.
  1242.  
  1243. You can specify what the title of the XEmacs windows and icons should be
  1244. with the variables `frame-title-format' and `frame-icon-title-format',
  1245. which have the same syntax as `mode-line-format'.
  1246.  
  1247. XEmacs now supports floating-point numbers.
  1248.  
  1249. XEmacs now knows about timers directly, instead of them being simulated by
  1250. a subprocess.
  1251.  
  1252. XEmacs understands truenames, and can be configured to notice when you are
  1253. visiting two names of the same file.  See the variables find-file-use-truenames
  1254. and find-file-compare-truenames.
  1255.  
  1256. If you're running on a machine with audio hardware, you can specify sound 
  1257. files for XEmacs to play instead of the default X beep.  See the documentation
  1258. of the function load-sound-file and the variable sound-alist.
  1259.  
  1260. An XEmacs frame can be placed within an "external client widget" managed by
  1261. another application.  This allows an application to use an XEmacs frame as its
  1262. text pane rather than the standard Text widget that is provided with Motif or
  1263. Athena.  XEmacs supports Motif applications, generic Xt (e.g. Athena)
  1264. applications, and raw Xlib applications.
  1265.  
  1266. Random changes to the emacs-lisp library: (some of this was not written by
  1267. us, but is included because it's free software and we think it's good stuff)
  1268.  
  1269.   - there is a new optimizing byte-compiler
  1270.   - there is a new abbrev-based mail-alias mechanism
  1271.   - the -*- line can contain local-variable settings
  1272.   - there is a new TAGS package
  1273.   - there is a new VI-emulation mode (viper)
  1274.   - there is a new implementation of Dired
  1275.   - there is a new implementation of Isearch
  1276.   - the VM package for reading mail is provided
  1277.   - the W3 package for browsing the World Wide Web hypertext information
  1278.     system is provided
  1279.   - the Hyperbole package, a programmable information management and
  1280.     hypertext system
  1281.   - the OO-Browser package, a multi-language object-oriented browser
  1282.  
  1283. There are many more specifics in the "Miscellaneous Changes" section, below.
  1284.  
  1285. The online Emacs Manual and Emacs-Lisp Manual are now both relatively
  1286. up-to-date.
  1287.  
  1288. * XEmacs Release Notes
  1289. ======================
  1290.  
  1291. ** Major Differences Between 19.12 and 19.13
  1292. ============================================
  1293.  
  1294. This is primarily a bug-fix release.  Lots of bugs have been fixed.
  1295. Hopefully only a few have been introduced.  The most noteworthy bug
  1296. fixes are:
  1297.  
  1298.  -- There should be no more problems connecting XEmacs to an X
  1299.     server over SLIP or other slow connections.
  1300.  -- Periodic crashes when using the Buffers menu should be gone.
  1301.  -- etags would sometimes erase the current buffer; it doesn't
  1302.     any more.
  1303.  -- XEmacs will correctly exit if the X server dies.
  1304.  -- uniconified frames are displayed properly under TVTWM.
  1305.  -- Breakage in `add-menu-item' / `add-menu-button' is fixed.
  1306.  
  1307. The Motif menubar has _NOT_ been fixed for 19.13.  You should use the
  1308. Lucid menubar instead.
  1309.  
  1310. Multi-device support should now be working properly.  You can now open
  1311. an X device after having started out on a TTY device.
  1312.  
  1313. Background pixmaps now work.  See `set-face-background-pixmap'.
  1314.  
  1315. Echo area messages are now saved to a buffer, " *Message Log*".  To
  1316. see this buffer, use the command `show-message-log'.  It is possible
  1317. to filter the message which are actually included by modifying the
  1318. variables `log-message-ignore-regexps' and `log-message-ignore-labels'.
  1319.  
  1320. You can now control which warnings you want to see.  See
  1321. `display-warning-suppressed-classes' and friends.
  1322.  
  1323. You can now set the default location of an "other window" from the
  1324. Options menu.
  1325.  
  1326. "Save Options" now saves the state of all faces.
  1327.  
  1328. You can choose which file "Save Options" writes into; see
  1329. `save-options-file'.
  1330.  
  1331. XPM support is no longer required for the toolbar.
  1332.  
  1333. The relocating allocator is now enabled by default whenever possible.
  1334. This allows buffer memory to be returned to the system when no longer
  1335. in use which helps keep XEmacs process size down.
  1336.  
  1337. The ability to have captioned toolbars has been added.  Currently only
  1338. the default toolbar actually has a captioned version provided.  A new
  1339. specifier variable, `toolbar-buttons-captioned-p' controls whether the
  1340. toolbar is captioned.
  1341.  
  1342. A copy of the XEmacs FAQ is now included and is available through info.
  1343.  
  1344. The on-line E-Lisp reference manual has been significantly updated.
  1345.  
  1346. There is now audio support under Linux.
  1347.  
  1348. Modifier keys can now be sticky.  This is controlled by the variable
  1349. `modifier-keys-are-sticky'.
  1350.  
  1351. manual-entry should now work correctly under Irix with the penalty of
  1352. a longer startup time the first time it is invoked.  If you are having
  1353. problems with this on another system try setting
  1354. `Manual-use-subdirectory-list' to t.
  1355.  
  1356. make-tty-device no longer automatically creates the first frame.
  1357.  
  1358. Rectangular regions now work correctly.
  1359.  
  1360. ediff no longer sets synchronize-minibuffers to t unless you first set
  1361. ediff-synchronize-minibuffers
  1362.  
  1363. keyboard-translate-table has been implemented.  This means that the
  1364. `enable-flow-control' command for dealing with TTY connections that
  1365. filter out ^S and ^Q now works.
  1366.  
  1367. You can now create frames that are initially unmapped and frames that
  1368. are "transient for another frame", meaning that they behave more like
  1369. dialog-box frames.
  1370.  
  1371. Other E-Lisp changes:
  1372.  
  1373. -- Specifier `menubar-visible-p' for controlling menubar visibility
  1374. -- Local command hooks should be set using `local-pre-command-hook'
  1375.    and `local-post-command-hook' instead of making the global
  1376.    equivalents be buffer-local.
  1377. -- `quit-char', `help-char', `meta-prefix-char' can be any key specifier
  1378.    instead of just an integer.
  1379. -- new functions `add-async-timeout' and `disable-async-timeout'.
  1380.    These let you create asynchronous timeouts, which are like
  1381.    normal timeouts except that they're executed even during
  1382.    running Lisp code.  Use this with care!
  1383. -- `debug-on-error' and `stack-trace-on-error' now enter the debugger
  1384.    only when an *unhandled* error occurs.  If you want the old
  1385.    behavior, use `debug-on-signal' and `stack-trace-on-signal'.
  1386. -- \U, \L, \u, \l, \E recognized specially in `replace-match'.
  1387.    These are standard ex/perl commands for changing the case of
  1388.    replaced text.
  1389. -- New function event-matches-key-specifier-p.  This provides
  1390.    a clean way of comparing keypress events with key specifiers
  1391.    such as 65, (shift home), etc. without having to resort
  1392.    to ugly `character-to-event' / `event-to-character' hacks.
  1393. -- New function `add-to-list'
  1394. -- New Common-Lisp functions `some', `every', `notevery', `notany',
  1395.    `adjoin', `union', `intersection', `set-difference',
  1396.    `set-exclusive-or', `subsetp'
  1397. -- `remove-face-property' provides a clean way of removing a
  1398.    face property.
  1399.  
  1400. Many of the Emacs Lisp packages have been updated.  Some of the new
  1401. Emacs Lisp packages ---
  1402.  
  1403. ada-mode:  major mode for editing Ada source
  1404.  
  1405. arc-mode:  simple editing of archives
  1406.  
  1407. auto-show-mode:  automatically scrolls horizontally to keep point on-screen 
  1408.  
  1409. completion:  dynamic word completion mode
  1410.  
  1411. dabbrev:  the dynamic abbrev package has been rewritten and is much
  1412.           more powerful -- e.g. it searches in other buffers as well
  1413.           as the current one
  1414.  
  1415. easymenu:  menu support package
  1416.  
  1417. live-icon:  makes frame icons represent the current frame contents
  1418.  
  1419. mailcrypt 3.2:  mail encryption with PGP; included but v2.4 is still
  1420.         the default
  1421.  
  1422. two-column:  for editing two-column text 
  1423.  
  1424.  
  1425. ** Major Differences Between 19.11 and 19.12
  1426. ============================================
  1427.  
  1428. This is a huge new release.  Almost every aspect of XEmacs has been changed
  1429. at least somewhat.  The highlights are:
  1430.  
  1431. -- TTY support (includes face support)
  1432. -- new redisplay engine; should be faster, less buggy, and more powerful
  1433. -- terminology change from "screen" to "frame"
  1434. -- built-in toolbar
  1435. -- toolbar support added to many packages
  1436. -- multiple device support (still in beta; improvements to come in
  1437.    19.13)
  1438. -- Purify used to ensure that there are no memory leaks or memory corruption
  1439.    problems
  1440. -- horizontal and vertical scrollbars in all windows
  1441. -- new Lucid (i.e. look-alike Motif) scrollbar widget
  1442. -- stay-up menus in the Lucid (look-alike Motif) menubar widget
  1443. -- 3-d modeline
  1444. -- new extents engine; should be faster, less buggy, and more powerful
  1445. -- much more powerful control over faces
  1446. -- expanded menubar
  1447. -- more work on synching with FSF Emacs 19.28
  1448. -- new packages: Hyperbole, OOBR (object browser), hm--html-menus, viper,
  1449.    lazy-lock.el, ksh-mode.el, rsz-minibuf.el
  1450. -- package updates for all major packages
  1451. -- dynodump package for Solaris: provides proper undumping and portable
  1452.    binaries across different OS versions and machine types
  1453. -- Greatly expanded concept of "glyphs" (pixmaps etc. in a buffer)
  1454. -- built-in support for displaying X-Faces, if the X-Face library is
  1455.    available
  1456. -- built-in support for SOCKS if the SOCKS library is available
  1457. -- graceful behavior when the colormap is full (e.g. Netscape ate
  1458.    all the colors)
  1459. -- built-in MD5 (secure hashing function) support
  1460.  
  1461.  
  1462. More specific information:
  1463.  
  1464. *** TTY Support
  1465. ---------------
  1466.  
  1467. The long-awaited TTY support is now available.  XEmacs will start up
  1468. in TTY mode (using the tty you started XEmacs from) if the DISPLAY
  1469. environment variable is not set or if you use the `-nw' option.
  1470.  
  1471. Faces are available on TTY's.  For a demonstration, try editing a C
  1472. file and turning on font-lock-mode.
  1473.  
  1474. You can also connect to additional TTY's using `make-tty-device',
  1475. whether your first frame was a TTY or an X window.  This ability is
  1476. not yet completely finished.
  1477.  
  1478. The full event-loop capabilities (processes, timeouts, etc.) are
  1479. available on TTY's.
  1480.  
  1481.  
  1482.  
  1483. *** New Redisplay Engine
  1484. ------------------------
  1485.  
  1486. The redisplay engine has been rewritten to improve its efficiency and
  1487. to increase its functionality.  It should also be significantly more
  1488. bug-free than the previous redisplay engine.
  1489.  
  1490. A line that is not big enough to display at the bottom of the window
  1491. will normally be clipped (so that it is partially visible) rather than
  1492. not displayed at all.  The variable `pixel-vertical-clip-threshold'
  1493. can be used to control the minimum space that must be available for a
  1494. line to be clipped rather than not displayed at all.
  1495.  
  1496. Tabs are displayed in such a way that things line up fairly well even
  1497. in the presence of variable-width fonts and/or lines with
  1498. multiply-sized fonts.
  1499.  
  1500. Display tables are implemented, through the specifier variable
  1501. `current-display-table'.  They can be buffer-local, window-local,
  1502. frame-local, or device-local.  See below for info about specifiers.
  1503.  
  1504.  
  1505.  
  1506. *** Toolbar
  1507. -----------
  1508.  
  1509. There is now built-in support for a toolbar.  A sample toolbar is
  1510. visible by default at the top of the frame.  Four separate toolbars
  1511. can be configured (at the top, bottom, left, and right of the frame).
  1512. The toolbar specification is similar to the menubar specification.
  1513. The up, down, and disabled glyphs of a toolbar button can be
  1514. separately controlled.  Explanatory text can be echoed in the echo
  1515. area when the mouse passes over a toolbar button.  The size, contents,
  1516. and visibility of the various toolbars can be controlled on a
  1517. per-buffer, per-window, per-frame, and per-device basis through the
  1518. use of specifiers.  See the chapter on toolbars in the Lisp Reference
  1519. Manual (included with XEmacs) for more information.
  1520.  
  1521. The toolbar color and shadow thicknesses are currently controlled only
  1522. through `modify-frame-parameters' and through X resources.  We are
  1523. planning on making these controllable through specifiers as well. (Our
  1524. hope is to make `modify-frame-parameters' obsolete, as it is a clunky
  1525. and not very powerful mechanism.)
  1526.  
  1527. Info, GNUS, VM, W3, and various other packages include custom toolbars
  1528. with them.
  1529.  
  1530.  
  1531.  
  1532. *** Menubar
  1533. -----------
  1534.  
  1535. Stay-up menus are implemented in the look-alike Motif menubar.
  1536.  
  1537. The default menubar has been expanded to include most commonly-used
  1538. functions in XEmacs.
  1539.  
  1540. The options menu has been greatly expanded to include many more
  1541. options.
  1542.  
  1543. The menubar specification format has been greatly expanded.  Per-menu
  1544. activation hooks can be specified through the :filter keyword (thus
  1545. obsoleting `activate-menubar-hook'); this allows for fast response
  1546. time when you have a large and complex menu.  You can dynamically
  1547. control whether menu items are present through the :included and
  1548. :config keywords. (The latter keyword implements a simple menubar
  1549. configuration scheme, in conjunction with the variable
  1550. `menubar-configuration'.) Many different menu-item separators (single
  1551. or double line; solid or dashed; flat, etched-in, or etched-out) are
  1552. available.  See the chapter on menus in the Lisp Reference Manual for
  1553. more information about all of this.
  1554.  
  1555. New functions `add-submenu' and `add-menu-button' are available.
  1556. These supersede the older `add-menu' and `add-menu-item' functions,
  1557. and provide a more powerful and consistent interface.
  1558.  
  1559. New convenience functions for popping up the part or all of the
  1560. menubar in a pop-up menu are available: `popup-menubar-menu' and
  1561. `popup-buffer-menu'.
  1562.  
  1563. Menus are now incrementally constructed greatly improving menubar
  1564. response time.
  1565.  
  1566.  
  1567.  
  1568. *** Scrollbars
  1569. --------------
  1570.  
  1571. A look-alike Motif scrollbar is now included with XEmacs.  No longer
  1572. will you have to suffer with ugly Athena scrollbars.
  1573.  
  1574. Windows can now have horizontal scrollbars.  Normally they are visible
  1575. when the window's buffer is set to truncate lines rather than wrap
  1576. them (e.g. `(setq truncate-lines t)').
  1577.  
  1578. All windows, not only the right-most ones, can have vertical
  1579. scrollbars.
  1580.  
  1581. The functions to change a scrollbar's width have been superseded by
  1582. the specifier variables `scrollbar-width' and `scrollbar-height'.
  1583. This allows their values to be controlled on a buffer-local,
  1584. window-local, frame-local, and device-local basis.  See below.
  1585.  
  1586. The scrollbars interact better with the event loop (for example, you
  1587. can type `C-h k', do a scrollbar action, and see a description of this
  1588. scrollbar action printed as if you had pressed a key sequence or
  1589. selected a menu item).
  1590.  
  1591. The scrollbar behavior can be reprogrammed, by advising the
  1592. `scrollbar-*' functions.
  1593.  
  1594.  
  1595.  
  1596. *** Key Bindings
  1597. ----------------
  1598.  
  1599. The oft-used function `goto-line' now has its own binding: M-g.
  1600.  
  1601. New bindings are available for scrolling the "other" window: M-next,
  1602. M-prior, M-home, M-end. (On many keyboards, `next' and `prior'
  1603. labelled `PgUp' and `PgDn'.)
  1604.  
  1605. You can reactivate a deactivated Zmacs region, without having any
  1606. other effects, with the binding M-C-z.
  1607.  
  1608. The bindings `M-u', `M-l', and `M-c' now work on the region (if a
  1609. region is active) or work on a word, as before.
  1610.  
  1611. Shift-Control-G forces a "critical quit", which drops immediately into
  1612. the debugger; see below.
  1613.  
  1614.  
  1615.  
  1616. *** Modeline
  1617. ------------
  1618.  
  1619. The modeline can now have a 3-d look; this is enabled by default.  The
  1620. specifier variable `modeline-shadow-thickness' controls the size.
  1621.  
  1622. The modeline can now be turned off on a per-buffer, per-window,
  1623. per-frame, or per-device basis.  The specifier variable
  1624. `has-modeline-p' controls whether the modeline is visible.  See below
  1625. for details about the vastly powerful specifier mechanism.
  1626.  
  1627. The modeline functions and variables have been renamed to be
  1628. `*-modeline-*' rather than `*-mode-line-*'.  Aliases are provided for
  1629. all the old names.
  1630.  
  1631. Variable width fonts now work correctly when used in the modeline.
  1632.  
  1633.  
  1634.  
  1635. *** Minibuffer, Echo Area
  1636. -------------------------
  1637.  
  1638. The minibuffer is no longer constrained to be one line high.  The
  1639. package rsz-minibuf.el is included to automatically resize the
  1640. minibuffer when its contents are too big; enable this with
  1641. `resize-minibuffer-mode'.
  1642.  
  1643. The echo area is now a true buffer, called " *Echo Area*".  This
  1644. allows you to customize the echo area behavior through
  1645. before-change-functions and after-change-functions.
  1646.  
  1647.  
  1648.  
  1649. *** Specifiers
  1650. --------------
  1651.  
  1652. XEmacs has a new concept called "specifiers", used to configure most
  1653. display options (toolbar size and contents, scrollbar size, face
  1654. properties, modeline visibility and shadow-thickness, glyphs, display
  1655. tables, etc.).  We are planning on converting all display
  1656. characteristics to use specifiers, and obsoleting the clunky functions
  1657. `frame-parameters' and `modify-frame-parameters'.  Specifically:
  1658.  
  1659. -- You can specify values (called "instantiators") for particular
  1660.    "locales" (i.e. buffers, windows, frames, devices, or a global value).
  1661.    When determining what the actual value (or "instance") of a specifier
  1662.    is, the specifications that are provided are searched from most
  1663.    specific (i.e. buffer-local) to most general (i.e. global), looking
  1664.    for a matching one.
  1665.  
  1666. -- You can specify multiple instantiators for a particular locale.
  1667.    For example, when specifying what the foreground color of a face
  1668.    is in a particular buffer, you could specify two instantiators:
  1669.    "dark sea green" and "green".  The color would then be dark sea
  1670.    green on devices that recognize that color, and green on other
  1671.    devices.  You have effectively provided a fallback value to make
  1672.    sure you get reasonable behavior on all devices.
  1673.  
  1674. -- You can add one or more tags to an instantiator, where a tag
  1675.    is a symbol that has been previously registered with XEmacs.
  1676.    This allows you to identify your instantiators for later
  1677.    removal in a way that won't interfere with other applications
  1678.    using the same specifier.  Furthermore, particular tags can
  1679.    be restricted to match only particular sorts of devices.
  1680.    Any tagged instantiator will be ignored if the device over which
  1681.    it is being instanced does not match any of its tags.  This
  1682.    allows you, for example, to restrict an instantiator to a
  1683.    particular device type (X or TTY) and/or class (color, grayscale,
  1684.    or mono). (You might want to specify, for example, that a
  1685.    particular face is displayed in green on color devices and is
  1686.    underlined on mono devices.)
  1687.  
  1688. -- A full API is provided for manipulating specifiers, and full
  1689.    documentation is provided in the Lisp Reference Manual.
  1690.  
  1691.  
  1692.  
  1693. *** Basic Lisp Stuff
  1694. --------------------
  1695.  
  1696. Common-Lisp backquote syntax is recognized.  For example, the old
  1697. expression
  1698.  
  1699. (` (a b (, c)))
  1700.  
  1701. can now be written
  1702.  
  1703. `(a b ,c)
  1704.  
  1705. The old backquote syntax is still accepted.
  1706.  
  1707. The new function `type-of' returns a symbol describing the type of a
  1708. Lisp object (`integer', `string', `symbol', etc.)
  1709.  
  1710. Symbols beginning with a colon (called "keywords") are treated
  1711. specially in that they are automatically made self-evaluating when
  1712. they are interned into `obarray'.  The new function `keywordp' returns
  1713. whether a symbol begins with a colon.
  1714.  
  1715. `get', `put', and `remprop' have been generalized to allow you to set
  1716. and retrieve properties on many different kinds of objects: symbols,
  1717. strings, faces, glyphs, and extents (for extents, however, this is not
  1718. yet implemented).  They are joined by a new function `object-props'
  1719. that returns all of the properties that have been set on an object.
  1720.  
  1721. New functions `plists-eq' and `plists-equal' are provided for
  1722. comparing property lists (a property list is an alternating list
  1723. of keys and values).
  1724.  
  1725. The Common-Lisp functions `caar', `cadr', `cdar', `cddr', `caaar', etc.
  1726. (up to four a's and/or d's), `first', `second', `third', etc. (up to
  1727. `tenth'), `last', `rest', and `endp' have been added, for more
  1728. convenient manipulation of lists.
  1729.  
  1730. New function `mapvector' maps over a sequence and returns a vector
  1731. of the results, analogous to `mapcar'.
  1732.  
  1733. New functions `rassoc', `remassoc', `remassq', `remrassoc', and
  1734. `remrassq' are provided for working with alists.
  1735.  
  1736. New functions `defvaralias', `variable-alias' and `indirect-variable'
  1737. are provided for creating variable aliases.
  1738.  
  1739. Strings have a modified-tick that is bumped every time a string
  1740. is modified in-place with `aset' or `fillarray'.  This is retrieved
  1741. with the new function `string-modified-tick'.
  1742.  
  1743. New macro `push' destructively adds an element to the beginning of a
  1744. list.  New macro `pop' destructively removes and returns the first
  1745. element of a list.
  1746.  
  1747.  
  1748.  
  1749. *** Buffers
  1750. -----------
  1751.  
  1752. Most functions that operate on buffer text now take an optional BUFFER
  1753. argument, specifying which buffer they operate on.  (Previously, they
  1754. always operated on the current buffer.)
  1755.  
  1756. The new function `transpose-regions' is provided, ported from FSF
  1757. Emacs.
  1758.  
  1759. The new function `save-current-buffer' works like `save-excursion'
  1760. but only saves the current buffer, not the location of point in
  1761. that buffer.
  1762.  
  1763.  
  1764.  
  1765. *** Devices
  1766. -----------
  1767.  
  1768. XEmacs has a new concept of "device", which is represents a particular
  1769. X display or TTY connection.  `make-frame' has a new, optional device
  1770. parameter that allows you to specify which device the frame is to be
  1771. created on.
  1772.  
  1773. Multiple simultaneous TTY and/or X connections may be made.  The
  1774. specifier mechanism provides reasonable behavior of glyphs, faces,
  1775. etc. over heterogeneous device types and over devices whose individual
  1776. capabilities may vary.
  1777.  
  1778. There is also a device type called "stream" that represents a STDIO
  1779. device that has no redisplay or cursor-motion capabilities, such as
  1780. the "glass terminal" that XEmacs uses when it is run noninteractively.
  1781. There is not all that much you can do with stream devices currently;
  1782. please let us know if there are good uses you can think of for this
  1783. capability. (For example, log files?)
  1784.  
  1785. A new device API is provided.  Functions are provided such as
  1786. `device-name' (the name of the device, which generally is based on the
  1787. X display or TTY file name), `device-type' (X, TTY, or stream),
  1788. `device-class' (color, grayscale, or mono), etc.  See the Lisp
  1789. Reference Manual.
  1790.  
  1791. Many functions have been extended to contain an additional, optional
  1792. device argument, where such an extension makes sense.  In general, if
  1793. the argument is omitted, it is equivalent to specifying
  1794. `(selected-device)'.
  1795.  
  1796. Many previous functions and variables are obsoleted in favor of the
  1797. device API.  For example, `window-system' is obsoleted by
  1798. `device-type', and `x-color-display-p' and friends are obsoleted by
  1799. `device-class'.
  1800.  
  1801. ** NOTE **: The obsolete variable `window-system' is going
  1802. to be deleted soon, probably in 19.14.  Please correct all
  1803. your code to use `device-type'.
  1804.  
  1805. ** INCOMPATIBLE CHANGE **: The function `x-display-visual-class'
  1806. returns different values from previous versions of XEmacs.
  1807.  
  1808.  
  1809.  
  1810. *** Errors, Warnings, C-g
  1811. -------------------------
  1812.  
  1813. There is a new warnings system implemented.  Many warnings that were
  1814. formerly displayed in various ad-hoc ways (e.g. warnings about screwy
  1815. modifier mappings, messages about failures handling the mouse cursor
  1816. and errors in a gc-hook) have been regularized through this system.
  1817. The new function `warn' displays a warning before the next redisplay
  1818. (the actually display of the warning messages is accomplished through
  1819. `display-warning-buffer').  Both `warn' and `display-warning-buffer'
  1820. are Lisp functions (the C code calls out to them as necessary), and
  1821. thus you can customize the warning system.
  1822.  
  1823. Under an X display, you can press Shift-Control-G to force a "critical
  1824. quit".  This will immediately display a backtrace and pop you into the
  1825. debugger, regardless of the settings of `inhibit-quit' and
  1826. `debug-on-quit'.
  1827.  
  1828. C-g now works properly even on systems that don't implement SIGIO or
  1829. for which SIGIO is broken (e.g. IRIX 5.3 and older versions of Linux).
  1830. In addition, the SIGIO support has been fixed for many systems on
  1831. which it didn't always work properly before (e.g. HPUX and Solaris).
  1832.  
  1833.    
  1834.  
  1835. *** Events
  1836. ----------
  1837.  
  1838. ** INCOMPATIBLE CHANGE **: Many event functions have been changed to
  1839. accept and return windows instead of frames.
  1840.  
  1841. New function: `event-live-p', specifying whether `deallocate-event'
  1842. has been called on an event.
  1843.  
  1844. The "menu event" type has been renamed to "misc-user event", and
  1845. encompasses scrollbar events as well as menu events.  We are planning
  1846. on making it also encompass toolbar events in a future release.
  1847.  
  1848. New functions are provided for determining whether an particular
  1849. sections of a frame: `event-over-border-p', `event-over-glyph-p',
  1850. `event-over-modeline-p', `event-over-text-area-p', and
  1851. `event-over-toolbar-p'.  The old, kludgey methods of checking the
  1852. window-height, the internal-border-width, etc. are unreliable and
  1853. should not be used.
  1854.  
  1855. New functions `event-window-x-pixel' and `event-window-y-pixel' are
  1856. provided for determining where in a particular window an event
  1857. happened.
  1858.  
  1859. New functions `event-glyph-x-pixel' and `event-glyph-y-pixel' are
  1860. provided for determining where in a particular glyph an event
  1861. happened.
  1862.  
  1863. New function `event-closest-point', which returns the closest buffer
  1864. position to the event even if the event did not occur over any text.
  1865.  
  1866. New variable `unread-command-events', superseding the older
  1867. `unread-command-event'.
  1868.  
  1869. Many event-loop bugs have been fixed.
  1870.  
  1871.  
  1872.  
  1873. *** Extents
  1874. -----------
  1875.  
  1876. The extent code has been largely rewritten.  It should be faster and
  1877. more reliable.
  1878.  
  1879. The text-property implementation has been greatly improved.
  1880.  
  1881. Some new extent primitives are provided to return the position of the
  1882. next or previous property change in a buffer.
  1883.  
  1884. Extents can now have a parent specified; then all of its properties
  1885. (except for the buffer it's in and its position in that buffer) come
  1886. from that extent.  Hierarchies of such extents can be created.
  1887.  
  1888. Extents now have a `detachable' property that controls what happens
  1889. (they either get detached or shrink down to zero-length) when their
  1890. text is deleted.  Previously, such extents would always be detached.
  1891.  
  1892. The `invisible' property on extents now works.
  1893.  
  1894. `map-extents' has three additional parameters that provide more
  1895. control over which extents are mapped.
  1896.  
  1897. `map-extents' deals better with changes made to extents in the
  1898. buffer being mapped over.
  1899.  
  1900. A new function `mapcar-extents' (an alternative to `map-extents') has
  1901. been provided and should be easier to use than `map-extents'.
  1902.  
  1903.  
  1904.  
  1905. *** Faces
  1906. ---------
  1907.  
  1908. Faces can now be buffer-local, window-local, and device-local as well
  1909. as frame-local, and can be further restricted to a particular device
  1910. type or class.  The way in which faces can be controlled is now based
  1911. on the general and powerful specifier mechanism; see above.
  1912.  
  1913. The new function `set-face-property' generalizes `set-face-font',
  1914. `set-face-foreground', etc. and takes many new optional arguments, in
  1915. accordance with the new specifier mechanism.
  1916.  
  1917. The new functions `face-property' and `face-property-instance'
  1918. generalize `face-font', `face-foreground', etc. and take many new
  1919. optional arguments, in accordance with the new specifier mechanism.
  1920. (`face-property' returns the value, if any, that was specified for a
  1921. particular locale, and `face-property-instance' returns the actual
  1922. value that will be used for display.  See the section on specifiers.)
  1923.  
  1924. The functions `face-font', `face-foreground', `face-background',
  1925. `set-face-font', `set-face-foreground', `set-face-background',
  1926. etc. are now convenience functions, trivially implemented using
  1927. `face-property' and `set-face-property' and take new optioanl
  1928. arguments in accordance with those functions.  New convenience
  1929. functions `face-font-instance', `face-foreground-instance',
  1930. `face-background-instance', etc. are provided and are trivially
  1931. implemented using `face-property-instance'.
  1932.  
  1933. Inheritance of face properties can now be specified.  Each individual
  1934. face property can inherit differently from other properties, or not
  1935. inherit at all.
  1936.  
  1937. You can set user-defined properties on faces using
  1938. `set-face-property'.
  1939.  
  1940. You can create "temporary" faces, which are faces that disappear
  1941. when they are no longer in use.  This is as opposed to normal
  1942. faces, which stay around forever.
  1943.  
  1944. The function `make-face' takes a new optional argument specifying
  1945. whether a face should be permanent or temporary, and returns the
  1946. actual face object rather than the face symbol, as in previous
  1947. versions of XEmacs.
  1948.  
  1949. The function `face-list' takes a new optional argument specifying
  1950. whether permanent, temporary, or both kinds of faces should be
  1951. returned.
  1952.  
  1953. Faces have new TTY-specific properties: `highlight', `reverse',
  1954. `alternate', `blinking', and `dim'.
  1955.  
  1956. Redisplay is smarter about dealing with face changes: changes to a
  1957. particular face no longer cause all frames to be cleared and
  1958. redisplayed.
  1959.  
  1960. The Edit-Faces package is provided for interactively changing faces.
  1961. A menu item on the options menu is provided for this.
  1962.  
  1963. New functions are provided for retrieving the ascent, descent, height,
  1964. and width of a character in a particular face.
  1965.  
  1966.  
  1967.  
  1968. *** Fonts, Colors
  1969. -----------------
  1970.  
  1971. ** INCOMPATIBLE CHANGE **: The old "font" and "pixel" objects are gone.
  1972. In place are new objects "font specifier", "font instance", "color
  1973. specifier", and "color instance".  Functions `font-name', `pixel-name'
  1974. (an obsolete alias for `color-name'), etc. are now convenience
  1975. functions for working with font and color specifiers.  Old code that
  1976. is not too sophisticated about working with font and pixel objects may
  1977. still work, though.  (For example, the idiom `(font-name (face-font
  1978. 'default))' still works.)
  1979.  
  1980. You can now extract the RGB components of a color-instance object
  1981. (similar to the old pixel object) with the function
  1982. `color-instance-rgb-components'.  There is also a convenience function
  1983. `color-rgb-components' for working with color specifiers.
  1984.  
  1985. If there are no more colors available in the colormap, the nearest
  1986. existing color will be used when allocating a new color.
  1987.  
  1988.  
  1989.  
  1990. *** Frames
  1991. ----------
  1992.  
  1993. What used to be called "screens" are now called "frames", for clarity
  1994. and consistency with FSF Emacs.  Aliases are provided for all the old
  1995. screen functions and variables, to avoid introducing a huge E-Lisp
  1996. incompatibility.
  1997.  
  1998. The frame code has been merged with FSF Emacs 19.28, providing
  1999. improved functionality for many functions.
  2000.  
  2001.  
  2002.  
  2003. *** Glyphs, Images, and Pixmaps
  2004. -------------------------------
  2005.  
  2006. Glyphs (used in various places, i.e. as begin-glyphs and end-glyphs
  2007. attached to extents and appearing in a buffer or in marginal
  2008. annotations; as the truncator and continuor glyphs marking line wrap
  2009. or truncation; as an overlay at the beginning of a line; as the
  2010. displayable element in a toolbar button; etc.) can now be
  2011. buffer-local, window-local, frame-local, and device-local, and can be
  2012. further restricted to a particular device type or class.  The way in
  2013. which faces can be controlled is now based on the general and powerful
  2014. specifier mechanism; see above.
  2015.  
  2016. ** INCOMPATIBLE CHANGE **: The glyph and pixmap API has been completely
  2017. overhauled.  A new Lisp object "glyph" is provided and should be used
  2018. where the old "pixmap" object would have been used.  The pixmap object
  2019. exists no longer.  There are also new Lisp objects "image specifier"
  2020. and "image instance" (an image-instance is the closest equivalent to
  2021. what a pixmap object was).  More work on glyphs and images is slated
  2022. for 19.13.  The glyph and image docs in the Lisp Reference Manual are
  2023. incomplete and will be finished in 19.13.
  2024.  
  2025. The new function `set-glyph-property' allows setting of all the
  2026. glyph properties (`baseline', `contrib-p', etc.).  Convenience
  2027. functions for particular properties are also provided, just like
  2028. for faces.
  2029.  
  2030. You can set user-defined properties on glyphs using the new function
  2031. `set-glyph-property'.
  2032.  
  2033. When displaying pixmaps, existing, closest-matching colors will be
  2034. used if the colormap is full.
  2035.  
  2036. If the compface library is compiled into XEmacs, there is built-in
  2037. support for displaying X-Face bitmaps. (These are typically small
  2038. pictures of people's faces, included in a mail message through the
  2039. X-Face: header.) VM and highlight-headers will automatically use the
  2040. built-in X-Face support if it is available.
  2041.  
  2042. Annotations in the right margin (as well as the left margin) are now
  2043. implemented.  The left and right margin width functions have been
  2044. superseded by the specifier variables `left-margin-width' and
  2045. `right-margin-width', allowing much more flexible control through the
  2046. specifier mechanism.
  2047.  
  2048. ** INCOMPATIBLE CHANGE **: The variable `use-left-overflow',
  2049. for controlling annotations in the left margin, is now a specifier
  2050. variable instead of a buffer-local variable.  (There is also a new
  2051. variable `use-right-overflow', that is complementary.)
  2052.  
  2053.  
  2054.  
  2055. *** Hashing
  2056. -----------
  2057.  
  2058. Two new types of weak hashtables can be created: key-weak and
  2059. value-weak.  In a key-weak hashtable, an entry remains around
  2060. if its key is referenced elsewhere, regardless of whether this
  2061. is also the case for the value.  Value-weak hashtables are
  2062. complementary. (This is as opposed to the traditional weak
  2063. hashtables, where an entry remains around only if both the
  2064. key and value are referenced elsewhere.) New functions
  2065. `make-key-weak-hashtable' and `make-value-weak-hashtable'
  2066. are provided for creating these hashtables.
  2067.  
  2068. The new function `md5' is provided for performing an MD5
  2069. hash of an object.  MD5 is a secure message digest algorithm
  2070. developed by RSA, inc.
  2071.  
  2072.  
  2073.  
  2074. *** Keymaps
  2075. -----------
  2076.  
  2077. The FSF Emacs concept of `function-key-map' is now partially
  2078. implemented.  This allows conversion of function-key escape sequences
  2079. such as `ESC [ 1 1 ~' into an equivalent human-readable keysym such as
  2080. `F1'.  This work will be completed in 19.14.  The function-key map is
  2081. device-local and controllable through the functions
  2082. `device-function-key-map' and `set-device-function-key-map'.
  2083.  
  2084. `where-is-internal' now correctly searches minor-mode keymaps,
  2085. extent-local keymaps, etc.  As a side effect of this, menu items will
  2086. now correctly show the keyboard equivalent for commands that are
  2087. available through a minor-mode keymap, extent-local keymap, etc.
  2088.  
  2089. ** INCOMPATIBLE CHANGE **: The modifier key "Symbol" has
  2090. been renamed to "Alt", for compatibility with the rest of the world.
  2091. Keep in mind that on many keyboards, the key labelled "Alt" actually
  2092. generates the "Meta" modifier.  (On Sun keyboards, however, the key
  2093. labelled "Alt" does indeed generate the "Alt" modifier, and the key
  2094. labelled with a diamond generates the "Meta" modifier.)
  2095.  
  2096.  
  2097.  
  2098. *** Mouse, Active Region
  2099. ------------------------
  2100.  
  2101. The mouse internals in mouse.el have been rewritten.  Hooks have been
  2102. provided for easier customization of mouse behavior.  For example, you
  2103. can now easily specify an action to be invoked on single-click
  2104. (i.e. down-up without appreciable motion), double-click, drag-up, etc.
  2105.  
  2106. Some code from FSF Emacs has been ported over, generalizing some of
  2107. the X-specific mouse stuff.
  2108.  
  2109. ** INCOMPATIBLE CHANGE **: The function `set-mouse-position' accepts
  2110. a window instead of a frame.
  2111.  
  2112. New function `mouse-position' that obsoletes and is more powerful than
  2113. `read-mouse-position'.
  2114.  
  2115. New functions `mouse-pixel-positon' and `set-mouse-pixel-position' for
  2116. working with pixels instead of characters.
  2117.  
  2118. The active (Zmacs) region is now highlighted using the `zmacs-region-face'
  2119. instead of the `primary-selection-face'; this generalizes what used
  2120. to be X-specific.
  2121.  
  2122. New functions `region-active-p', `region-exists-p', and `activate-region'
  2123. provide a uniform API for dealing with the region irrespective of
  2124. whether the variable `zmacs-regions' is set.
  2125.  
  2126. XEmacs is now a better X citizen with respect to the primary selection:
  2127. it does not stomp on the primary selection quite so much.  This makes
  2128. things more manageable if you set `zmacs-regions' to nil.
  2129.  
  2130.  
  2131.  
  2132. *** Processes
  2133. -------------
  2134.  
  2135. Various process race conditions and bugs have been fixed.  Problems
  2136. with process termination not getting noticed until much later (if at
  2137. all) should be gone now, as well as problems with zombie processes
  2138. under some systems.
  2139.  
  2140. SOCKS support is now included.  SOCKS is a package that allows hosts
  2141. behind a firewall to gain full access to the Internet without
  2142. requiring direct IP reachability.
  2143.  
  2144.  
  2145.  
  2146. *** Windows
  2147. -----------
  2148.  
  2149. Windows 95 is still not out yet.
  2150.  
  2151. ** INCOMPATIBLE CHANGE **: The functions `locate-window-from-coordinates'
  2152. and `window-edges' have been eliminated.  It no longer makes sense to
  2153. work with windows in terms of character positions, because windows can
  2154. (and often do) have many differently-sized fonts in them, because the
  2155. 3-D modeline is not exactly one line high, etc.
  2156.  
  2157. The new functions `window-pixel-edges', `window-highest-p',
  2158. `window-lowest-p', `frame-highest-window', and `frame-lowest-window'
  2159. are provided as substitutes for the above-mentioned, deleted
  2160. functions.
  2161.  
  2162. The function `window-end' now takes an optional GUARANTEE argument
  2163. that will ensure that the value is actually correct as of the next
  2164. redisplay.
  2165.  
  2166. The window code has been merged with FSF Emacs 19.28, providing
  2167. improved functionality for many functions.
  2168.  
  2169.  
  2170.  
  2171. *** System-Specific Information
  2172. -------------------------------
  2173.  
  2174. Georg Nikodym's dynodump package is provided, for proper unexec()ing
  2175. on Solaris systems.  Executables built on Solaris 2.3 can now run on
  2176. Solaris 2.4 without crashing; similarly with executables built on one
  2177. type of Sun machine and run on another.
  2178.  
  2179. AIX 4.x is supported.
  2180.  
  2181. The NeXTstep operating system is supported in TTY mode (this is still
  2182. in beta).  There are plans to port XEmacs to the NeXTstep window
  2183. system, but it may be awhile before this is complete.
  2184.  
  2185. Problems with the `round' function causing arithmetic errors on HPUX 9
  2186. have been fixed.
  2187.  
  2188. You can now build XEmacs as an ELF executable on Linux systems that
  2189. support ELF.
  2190.  
  2191. Various other new system configurations are supported.
  2192.  
  2193.  
  2194.  
  2195. *** Packages
  2196. ------------
  2197.  
  2198. Most packages have been updated to the latest available versions.
  2199.  
  2200.  
  2201. Some of the new Emacs Lisp packages ---
  2202.  
  2203. Hyperbole: the everyday information manager.  Provides a Rolodex,
  2204.        allows links to be embedded in text, etc.
  2205.  
  2206. OOBR: a sophisticated class browser for object-oriented languages.
  2207.  
  2208. viper: a better VI emulator that allows Emacs and VI features
  2209.        to coexist happily.
  2210.  
  2211. hm--html-menus: a sophisticated package for editing HTML code,
  2212.         from Heiko Muenkel.
  2213.  
  2214. ksh-mode.el: for editing shell scripts.
  2215.  
  2216. lazy-lock.el: a lazy, on-the-fly fontifier.
  2217.  
  2218. paren.el: an improved matching paren highlighter
  2219.  
  2220.  
  2221.  
  2222. Major changes to existing packages --
  2223.  
  2224. VM: has a toolbar, many other nice features.
  2225.  
  2226. w3: has a toolbar, many other nice features.
  2227.  
  2228. ediff: provides three-way merging, has a better user interface.
  2229.  
  2230. info: has a toolbar.
  2231.  
  2232. highlight-headers.el: now highlights URL's and makes them active so
  2233.               that when clicked either Netscape 1.1 is called
  2234.               or Emacs W3 is run.
  2235.  
  2236.  
  2237. ** Major Differences Between 19.10 and 19.11
  2238. ============================================
  2239.   
  2240. The name has changed from "Lucid Emacs" to "XEmacs".  Along with this is a
  2241. new canonical ftp site: cs.uiuc.edu:/pub/xemacs.
  2242.  
  2243. XEmacs now has its very own World Wide Web page!  It contains a
  2244. complete list of the FTP distribution sites, the most recent FAQ,
  2245. pointers to Emacs Lisp packages not included with the distribution, and
  2246. other useful stuff.  Check it out at http://xemacs.cs.uiuc.edu/.
  2247.  
  2248. A preliminary New Users Guide.
  2249.  
  2250. cc-mode.el now provides the default C, C++ and Objective-C modes.
  2251.  
  2252. The primary goal of this release is stability.  Very few new features have
  2253. been introduced but lots of bugs have been fixed.  Many of the Emacs Lisp
  2254. packages have been updated.
  2255.  
  2256. Some of the new Emacs Lisp packages ---
  2257.  
  2258. tcl-mode.el:  major mode for editing TCL code
  2259.  
  2260. fast-lock.el: saves and restores font-lock highlighting, greatly
  2261.             reducing the time necessary for loading a font-lock'ed
  2262.             file
  2263.  
  2264. ps-print.el: prints buffers to Postscript printers preserving the
  2265.            buffer's bold and italic text attributes
  2266.  
  2267. toolbar.el: provides a "fake" toolbar for use with XEmacs (an
  2268.           integrated one will be included with 19.12)
  2269.  
  2270.  
  2271. ** Major Differences Between 19.9 and 19.10
  2272. ===========================================
  2273.  
  2274. The GNU `configure' system is now used to build lemacs.
  2275.  
  2276. The Emacs Manual and Emacs Lisp Reference Manual now document version 19.10.
  2277. If you notice any errors, please let us know.
  2278.  
  2279. When pixmaps are displayed in a buffer, they contribute to the line height -
  2280. that is, if the glyph is taller than the rest of the text on the line, the
  2281. line will be as tall as necessary to display the glyph.
  2282.  
  2283. In addition to using arbitrary sound files as emacs beeps, one can control
  2284. the pitch and duration of the standard X beep, on X servers which allow that
  2285. (Note: most don't.)
  2286.  
  2287. There is support for playing sounds on systems with NetAudio servers.
  2288.  
  2289. Minor modes may have mode-specific key bindings; keymaps may have an arbitrary
  2290. number of parent maps.
  2291.  
  2292. Menus can have toggle and radio buttons in them.
  2293.  
  2294. There is a font selection menu.
  2295.  
  2296. Some default key bindings have changed to match FSF19; the new bindings are
  2297.  
  2298.   Screen-related commands:
  2299.         C-x 5 2                 make-screen
  2300.         C-x 5 0                 delete-screen
  2301.         C-x 5 b                 switch-to-buffer-other-screen
  2302.         C-x 5 f                 find-file-other-screen
  2303.         C-x 5 C-f               find-file-other-screen
  2304.         C-x 5 m                 mail-other-screen
  2305.         C-x 5 o                 other-screen
  2306.         C-x 5 r                 find-file-read-only-other-screen
  2307.   Abbrev-related commands:
  2308.         C-x a l                 add-mode-abbrev
  2309.         C-x a C-a               add-mode-abbrev
  2310.         C-x a g                 add-global-abbrev
  2311.         C-x a +                 add-mode-abbrev
  2312.         C-x a i g               inverse-add-global-abbrev
  2313.         C-x a i l               inverse-add-mode-abbrev
  2314.         C-x a -                 inverse-add-global-abbrev
  2315.         C-x a e                 expand-abbrev
  2316.         C-x a '                 expand-abbrev
  2317.   Register-related commands:
  2318.         C-x r C-SPC             point-to-register
  2319.         C-x r SPC               point-to-register
  2320.         C-x r j                 jump-to-register
  2321.         C-x r s                 copy-to-register
  2322.         C-x r x                 copy-to-register
  2323.         C-x r i                 insert-register
  2324.         C-x r g                 insert-register
  2325.         C-x r r                 copy-rectangle-to-register
  2326.         C-x r c                 clear-rectangle
  2327.         C-x r k                 kill-rectangle
  2328.         C-x r y                 yank-rectangle
  2329.         C-x r o                 open-rectangle
  2330.         C-x r t                 string-rectangle
  2331.         C-x r w                 window-configuration-to-register
  2332.   Narrowing-related commands:
  2333.         C-x n n                 narrow-to-region
  2334.         C-x n w                 widen
  2335.   Other changes:
  2336.         C-x 3                   split-window-horizontally (was undefined)
  2337.         C-x -                   shrink-window-if-larger-than-buffer
  2338.         C-x +                   balance-windows
  2339.  
  2340. The variable allow-deletion-of-last-visible-screen has been removed, since 
  2341. it was widely hated.  You can now always delete the last visible screen if
  2342. there are other iconified screens in existence.
  2343.  
  2344. ToolTalk support is provided.
  2345.  
  2346. An Emacs screen can be placed within an "external client widget" managed
  2347. by another application.  This allows an application to use an Emacs screen
  2348. as its text pane rather than the standard Text widget that is provided
  2349. with Motif or Athena.
  2350.  
  2351. Additional compatibility with Epoch is provided (though this is not yet
  2352. complete.)
  2353.  
  2354.  
  2355. ** Major Differences Between 19.8 and 19.9
  2356. ==========================================
  2357.  
  2358. Scrollbars!  If you have Motif, these are real Motif scrollbars; otherwise,
  2359. Athena scrollbars are used.  They obey all the usual resources of their
  2360. respective toolkits.
  2361.  
  2362. There is now an implementation of dialog boxes based based on the Athena
  2363. widgets, as well as the existing Motif implementation.
  2364.  
  2365. This release works with Motif 1.2 as well as 1.1.  If you link with Motif, 
  2366. you do not also need to link with Athena.
  2367.  
  2368. If you compile lwlib with both USE_MOTIF and USE_LUCID defined (which is the
  2369. recommended configuration) then the Lucid menus will draw text using the Motif
  2370. string-drawing library, instead of the Xlib one.  The reason for this is that
  2371. one can take advantage of the XmString facilities for including non-Latin1
  2372. characters in resource specifications.  However, this is a user-visible change
  2373. in that, in this configuration, the menubar will use the "*fontList" resource 
  2374. in preference to the "*font" resource, if it is set.
  2375.  
  2376. It's possible to make extents which are copied/pasted by kill and undo.
  2377. There is an implementation of FSF19-style text properties based on this.
  2378.  
  2379. There is a new variable, minibuffer-max-depth, which is intended to circumvent
  2380. a common source of confusion among new Emacs users.  Since, under a window
  2381. system, it's easy to jump out of the minibuffer (by doing M-x, then getting
  2382. distracted, and clicking elsewhere) many, many novice users have had the
  2383. problem of having multiple minibuffers build up, even to the point of
  2384. exhausting the lisp stack.  So the default behavior is to disallow the
  2385. minibuffer to ever be reinvoked while active; if you attempt to do so, you
  2386. will be prompted about it.
  2387.  
  2388. There is a new variable, teach-extended-commands-p, which if set, will cause
  2389. `M-x' to remind you of any key bindings of the command you just invoked the
  2390. "long way."
  2391.  
  2392. There are menus in Dired, Tar, Comint, Compile, and Grep modes.
  2393.  
  2394. There is a menu of window management commands on the right mouse button over
  2395. the modelines.
  2396.  
  2397. Popup menus now have titles at the top; this is controlled by the new 
  2398. variable `popup-menu-titles'.
  2399.  
  2400. The `Find' key on Sun keyboards will search for the next (or previous)
  2401. occurrence of the selected text, as in OpenWindows programs.
  2402.  
  2403. The `timer' package has been renamed to `itimer' to avoid a conflict with
  2404. a different package called `timer'.
  2405.  
  2406. VM 5.40 is included.
  2407.  
  2408. W3, the emacs interface to the World Wide Web, is included.
  2409.  
  2410. Felix Lee's GNUS speedups have been installed, including his new version of
  2411. nntp.el which makes GNUS efficiently utilize the NNTP XOVER command if
  2412. available (which is much faster.)  
  2413.  
  2414. GNUS should also be much friendlier to new users: it starts up much faster,
  2415. and doesn't (necessarily) subscribe you to every single newsgroup.
  2416.  
  2417. The byte-compiler issues a new class of warnings: variables which are
  2418. bound but not used.  This is merely an advisory, and does not mean the
  2419. code is incorrect; you can disable these warnings in the usual way with
  2420. the `byte-compiler-options' macro.
  2421.  
  2422. the `start-open' and `end-open' extent properties, for specifying whether
  2423. characters inserted exactly at a boundary of an extent should go into the
  2424. extent or out of it, now work correctly.
  2425.  
  2426. The `extent-data' slot has been generalized/replaced with a property list,
  2427. so it's easier to attach arbitrary data to extent objects.
  2428.  
  2429. The `event-modifiers' and `event-modifier-bits' functions work on motion
  2430. events as well as other mouse and keyboard events.
  2431.  
  2432. Forms-mode uses fonts and read-only regions.
  2433.  
  2434. The behavior of the -geometry command line option should be correct now.
  2435.  
  2436. The `iconic' screen parameter works when passed to x-create-screen.
  2437.  
  2438. The user's manual now documents Lucid Emacs 19.9.
  2439.  
  2440. The relocating buffer allocator is turned on by default; this means that when
  2441. buffers are killed, their storage will be returned to the operating system, 
  2442. and the size of the emacs process will shrink.
  2443.  
  2444. CAVEAT: code which contains calls to certain `face' accessor functions will
  2445. need to be recompiled by version 19.9 before it will work.  The functions
  2446. whose callers must be recompiled are: face-font, face-foreground,
  2447. face-background, face-background-pixmap, and face-underline-p.  The symptom
  2448. of this problem is the error "Wrong type argument, arrayp, #<face ... >".
  2449. The .elc files generated by version 19.9 will work in 19.6 and 19.8, but
  2450. older .elc files which contain calls to these functions will not work in 19.9.
  2451.  
  2452. Work In Progress:
  2453.  
  2454.  - We have been in the process of internationalizing Lucid Emacs.  This code is
  2455.    ***not*** ready for general use yet.  However, the code is included (and
  2456.    turned off by default) in this release.
  2457.  
  2458.    - If you define I18N2 at compile-time, then sorting/collation will be done
  2459.      according to the locale returned by setlocale().
  2460.  
  2461.    - If you define I18N3 at compile-time, then all messages printed by lemacs
  2462.      will be filtered through the gettext() library routine, to enable the use
  2463.      of locale-specific translation catalogues.  The current implementation of
  2464.      this is quite dependent on Solaris 2, and has a very large impact on 
  2465.      existing code, therefore we are going to be making major changes soon.
  2466.      (You'll notice calls to `gettext' and `GETTEXT' scattered around much of
  2467.      the lisp and C code; ignore it, this will be going away.)
  2468.  
  2469.    - If you define I18N4 at compile-time, then lemacs will internally use a
  2470.      wide representation of characters, enabling the use of large character
  2471.      sets such as Kanji.  This code is very OS dependent: it requires X11R5, 
  2472.      and several OS-supplied library routines for reading and writing wide
  2473.      characters (getwc(), putwc(), and a few others.)  Performance is also a
  2474.      problem.  This code is also scheduled for a major overhaul, with the
  2475.      intent of improving performance and portability.  
  2476.  
  2477.      Our eventual goal is to merge with MULE, or at least provide the same base
  2478.      level of functionality.  If you would like to help out with this, let us 
  2479.      know.
  2480.  
  2481.  - Other work-in-progress includes Motif drag-and-drop support, ToolTalk 
  2482.    support, and support for embedding an Emacs widget inside another 
  2483.    application (where it can function as that other application's text-entry
  2484.    area).  This code has not been extensively tested, and may (or may not)
  2485.    have portability problems, but it's there for the adventurous.  Comments, 
  2486.    suggestions, bug reports, and especially fixes are welcome.  But have no
  2487.    expectations that this experimental code will work at all.
  2488.  
  2489.  
  2490. ** Major Differences Between 19.6 and 19.8
  2491. ==========================================
  2492.  
  2493. There were almost no differences between versions 19.6 and 19.7; version 19.7
  2494. was a bug-fix release that was distributed with Energize 2.1.
  2495.  
  2496. Lucid Emacs 19.8 represents the first stage of the Lucid Emacs/Epoch merger.
  2497. The redisplay engine now in lemacs is an improved descendant of the Epoch
  2498. redisplay.  As a result, many bugs have been eliminated, and several disabled
  2499. features have been re-enabled.  Notably:
  2500.  
  2501. Selective display (and outline-mode) work.
  2502.  
  2503. Horizontally split windows work.
  2504.  
  2505. The height of a line is the height of the tallest font displayed on that line;
  2506. it is possible for a screen to display lines of differing heights. (Previously,
  2507. the height of all lines was the height of the tallest font loaded.)
  2508.  
  2509. There is lisp code to scale fonts up and down, for example, to load the next-
  2510. taller version of a font.
  2511.  
  2512. There is a new internal representation for lisp objects, giving emacs-lisp 28
  2513. bit integers and a 28 bit address space, up from the previous maximum of 26.
  2514. We expect eventually to increase this to 30 bit integers and a 32 bit address
  2515. space, eliminating the need for DATA_SEG_BITS on some architectures.  (On 64
  2516. bit machines, add 32 to all of these numbers.)
  2517.  
  2518. GC performance is improved.
  2519.  
  2520. Various X objects (fonts, colors, cursors, pixmaps) are accessible as first-
  2521. class lisp objects, with finalization.
  2522.  
  2523. An alternate interface to embedding images in the text is provided, called
  2524. "annotations."  You may create an "annotation margin" which is whitespace at
  2525. the left side of the screen that contains only annotations, not buffer text.
  2526.  
  2527. When using XPM files, one can specify the values of logical color names to be
  2528. used when loading the files.
  2529.  
  2530. It is possible to resize windows by dragging their modelines up and down.  More
  2531. generally, it is possible to add bindings for mouse gestures on the modelines.
  2532.  
  2533. There is support for playing sound files on HP machines.
  2534.  
  2535. ILISP version 5.5 is included.
  2536.  
  2537. The Common Lisp #' read syntax is supported (#' is to "function" as ' is to
  2538. "quote".)
  2539.  
  2540. The `active-p' slot of menu items is now evaluated, so one can put arbitrary
  2541. lisp code in a menu to decide whether that item should be selectable, rather
  2542. than doing this with an `activate-menubar-hook'.
  2543.  
  2544. The X resource hierarchy has changed slightly, to be more consistent.  It used
  2545. to be
  2546.         argv[0]                 SCREEN-NAME     pane    screen
  2547.         ApplicationShell        EmacsShell      Paned   EmacsFrame
  2548.  
  2549.    now it is
  2550.  
  2551.         argv[0]                 shell           pane    SCREEN-NAME
  2552.         ApplicationShell        EmacsShell      Paned   EmacsFrame
  2553.  
  2554. The Lucid Emacs sources have been largely merged with FSF version 19; this
  2555. means that the lisp library contains the most recent releases of various
  2556. packages, and many new features of FSF 19 have been incorporated.
  2557.  
  2558. Because of this, the lemacs sources should also be substantially more portable.
  2559.  
  2560.  
  2561. ** Major Differences Between 19.4 and 19.6
  2562. ==========================================
  2563.  
  2564. There were almost no differences between versions 19.4 and 19.5; we fixed
  2565. a few minor bugs and repacked 19.4 as 19.5 for a CD-ROM that we gave away
  2566. as a trade show promotion.
  2567.  
  2568. The primary goal of the 19.6 release is stability, rather than improved
  2569. functionality, so there aren't many user-visible changes.  The most notable
  2570. changes are:
  2571.  
  2572.  - The -geometry command-line option now correctly overrides geometry
  2573.    specifications in the resource database.
  2574.  - The `width' and `height' screen-parameters work.
  2575.  - Font-lock-mode considers the comment start and end characters to be
  2576.    a part of the comment.
  2577.  - The lhilit package has been removed.  Use font-lock-mode instead.
  2578.  - vm-isearch has been fixed to work with isearch-mode.
  2579.  - new versions of ispell and calendar.
  2580.  - sccs.el has menus.
  2581.  
  2582. Lots of bugs were fixed, including the problem that lemacs occasionally
  2583. grabbed the keyboard focus.
  2584.  
  2585. Also, as of Lucid Emacs 19.6 and Energize 2.0 (shipping now) it is possible
  2586. to compile the public release of Lucid Emacs with support for Energize; so
  2587. now Energize users will be able to build their own Energize-aware versions
  2588. of lemacs, and will be able to use newer versions of lemacs as they are
  2589. released to the net.  (Of course, this is not behavior covered by your
  2590. Energize support contract; you do it at your own risk.)
  2591.  
  2592. I have not incorporated all portability patches that I have been sent since
  2593. 19.4; I will try to get to them soon.  However, if you need to make any
  2594. changes to lemacs to get it to compile on your system, it would be quite
  2595. helpful if you would send me context diffs (diff -c) against version 19.6.
  2596.  
  2597.  
  2598. ** Major Differences Between 19.3 and 19.4
  2599. ==========================================
  2600.  
  2601. Prototypes have been added for all functions.  Emacs compiles in the strict
  2602. ANSI modes of lcc and gcc, so portability should be vastly improved.
  2603.  
  2604. Many many many many core leaks have been plugged, especially in screen 
  2605. creation and deletion.
  2606.  
  2607. The float support reworked to be more portable and ANSI conformant.  This
  2608. resulted in these new configuration parameters: HAVE_INVERSE_HYPERBOLIC, 
  2609. HAVE_CBRT, HAVE_RINT, FLOAT_CHECK_ERRNO, FLOAT_CATCH_SIGILL, 
  2610. FLOAT_CHECK_DOMAIN.  Let us know if you had to change the defaults on your
  2611. architecture.
  2612.  
  2613. The SunOS unexec has been rewritten, and now works with either static or 
  2614. dynamic libraries, depending on whether -Bstatic or -Bdynamic were specified
  2615. at link-time.
  2616.  
  2617. Small (character-sized) bitmaps can be mixed in with buffer text via the new
  2618. functions set-extent-begin-glyph and set-extent-end-glyph.  (This is actually
  2619. a piece of functionality that Energize has been using for a while, but we've
  2620. just gotten around to making it possible to use it without Energize.  See how
  2621. nice we are?  Go buy our product.)
  2622.  
  2623. If compiled with Motif support, one can pop up dialog boxes from emacs lisp.
  2624. We encourage someone to contribute Athena an version of this code; it
  2625. shouldn't be much work.  
  2626.  
  2627. If dialog boxes are available, then y-or-n-p and yes-or-no-p use dialog boxes
  2628. instead of the minibuffer if invoked as a result of a command that was 
  2629. executed from a menu instead of from the keyboard.
  2630.  
  2631. Multiple screen support works better; check out doc of get-screen-for-buffer.
  2632.  
  2633. The default binding of backspace is the same as delete.  (C-h is still help.)
  2634.  
  2635. A middle click while the minibuffer is active does completion if you click on 
  2636. a highlighted completion, otherwise it executes the global binding of button2.
  2637.  
  2638. New versions of Barry Warsaw's c++-mode and syntax.c.  Font-lock-mode works
  2639. with C++ mode now.
  2640.  
  2641. The semantics of activate-menubar-hook has changed; the functions are called
  2642. with no arguments now.
  2643.  
  2644. `truename' no longer hacks the automounter; use directory-abbrev-alist instead.
  2645.  
  2646. Most minibuffer handling has been reimplemented in emacs-lisp.
  2647.  
  2648. There is now a builtin minibuffer history mechanism which replaces gmhist.
  2649.  
  2650.  
  2651. ** Major Differences Between 19.2 and 19.3
  2652. ==========================================
  2653.  
  2654. The ISO characters have correct case and syntax tables now, so the word-motion
  2655. and case-converting commands work sensibly on them.
  2656.  
  2657. If you set ctl-arrow to an integer, you can control exactly which characters
  2658. are printable.  (There will be a less crufty way to do this eventually.)
  2659.  
  2660. Menubars can now be buffer local; the function set-screen-menubar no longer
  2661. exists.  Look at GNUS and VM for examples of how to do this, or read 
  2662. menubar.el.
  2663.  
  2664. When emacs is reading from the minibuffer with completions, any completions
  2665. which are visible on the screen will highlight when the mouse moves over them;
  2666. clicking middle on a completion is the same as typing it at the minibuffer.
  2667. Some implications of this:  The *Completions* buffer is always mousable.  If
  2668. you're using the completion feature of find-tag, your source code will be
  2669. mousable when you type M-.  Dired buffers will be mousable as soon as you 
  2670. type ^X^F.  And so on.
  2671.  
  2672. The old isearch code has been replaced with a descendant of Dan LaLiberte's
  2673. excellent isearch-mode; it is more customizable, and generally less bogus.
  2674. You can search for "composed" characters.  There are new commands, too; see
  2675. the doc for ^S, or the NEWS file.
  2676.  
  2677. A patched GNUS 3.14 is included.
  2678.  
  2679. The user's manual now documents Lucid Emacs 19.3.
  2680.  
  2681. A few more modes have mouse and menu support.
  2682.  
  2683. The startup code should be a little more robust, and give you more reasonable
  2684. error messages when things aren't installed quite right (instead of the
  2685. ubiquitous "cannot open DISPLAY"...)
  2686.  
  2687. Subdirectories of the lisp directory whose names begin with a hyphen or dot
  2688. are not automatically added to the load-path, so you can use this to avoid
  2689. accidentally inflicting experimental software on your users.
  2690.  
  2691. I've tried to incorporate all of the portability patches that were sent to
  2692. me; I tried to solve some of the problems in different ways than the 
  2693. patches did, so let me know if I missed something.
  2694.  
  2695. Some systems will need to define NEED_STRDUP, NEED_REALPATH, HAVE_DREM, or
  2696. HAVE_REMAINDER in config.h.  Really this should be done in the appropriate
  2697. s- or m- files, but I don't know which systems need these and which don't.
  2698. If yours does, let me know which file it should be in.
  2699.  
  2700. Check out these new packages:
  2701.  
  2702. blink-paren.el: causes the matching parenthesis to flash on and off whenever
  2703.                 the cursor is sitting on a paren-syntax character.
  2704.  
  2705. pending-del.el: Certain commands implicitly delete the highlighted region:
  2706.                 Typing a character when there is a highlighted region replaces
  2707.                 that region with the typed character.
  2708.  
  2709. font-lock.el:   A code-highlighting package, driven off of syntax tables, so
  2710.                 that it understands block comments, strings, etc.  The 
  2711.                 insertion hook is used to fontify text as you type it in.
  2712.  
  2713. shell-font.el:  Displays your shell-buffer prompt in boldface.
  2714.